在父目录下调用cmake .构建之后,在output目录或sub目录下不会出现libsub.a库,说明当指定EXCLUDE_FROM_ALL选项,子目录的目标文件不会生成。 场景4:父目录CMakeLists.txt的add_subdirectory指定了EXCLUDE_FROM_ALL选项,且父目录的目标文件依赖子目录的目标文件。 # 父目录下的CMakeLists.txtcmake_minimum_required(V...
FetchContent_Declare:从 GIT 仓库或 URL 获取源码,可以指定版本,可以指定位置 FetchContent_MakeAvailable:让它作为当前的子项目,相当于执行了 add_subdirectory,并且做了一些保护措施 注: FetchContent 模块会将依赖下载到${CMAKE_BINARY_DIR}/_deps目录即build/_deps,受到FETCHCONTENT_BASE_DIR变量控制,但不建议更改 ...
如:add_subdirectory("${CMAKE_SOURCE_DIR}/Test"). 然后进入第二层,在第一层创建了相应文件夹的子目录中再进行遍历,具体与第一层类似。在遍历文件的数据结构类似树的结点,如对Test文件进行遍历,首先设置路径: set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin/test"},然后将路径加载到list_projects中 ...
add_executable(testmain.cpp) 1. 2. 3. 4. 5. 6. 在父目录下调用cmake .构建之后,在output目录或sub目录下不会出现libsub.a库,说明当指定EXCLUDE_FROM_ALL选项,子目录的目标文件不会生成。 场景4:父目录CMakeLists.txt的add_subdirectory指定了EXCLUDE_FROM_ALL选项,且父目录的目标文件依赖子目录的目标文件。
CMake-find-package兼容add-subdirectory 如果依赖是通过add_subdirectory添加的,那么find_package的时候会报错找不到xxx-config.cmake。 实际上通过add_subdirectory添加的话,对应的target已经存在了。所以我们可以直接判断如果target已经存在就跳过find_package:
对于源码发布的项目来说,子目录依赖是最简单的方式。如果你的依赖也是 CMake 写的项目文件,你可以使用add_subdirectory引入依赖中定义的构建目标(Target)。 一个常见的用法是使用git submodule把依赖作为子模块加入到repo中,然后用add_subdirectory直接添加。当然,你想直接拷贝一份代码到你的项目里也是可以的,只是以后升...
1.3.1 使用add_subdirectory命令(Using the add_subdirectory Command) add_subdirectory命令使得CMake可以处理子目录中的CMakeLists.txt文件,从而将子目录下的目标加入到整个项目构建中。 1.3.2 跨目录建立依赖关系(Establishing Cross-Directory Dependencies)
add_subdirectory(dependency) 代码语言:txt 复制 添加目标可执行文件:使用add_executable命令添加项目的可执行文件,并将源代码文件添加到目标中。 代码语言:cmake 复制 add_executable(MyProject main.cpp) 代码语言:txt 复制 链接依赖项:使用target_link_libraries命令将依赖项链接到目标可执行文件。
cmake的编译顺序,与add_subdirectory的顺序相关(前提:在没有任何编译依赖的情况下,这个后面会介绍到),比如上述的工程,在某些环境还是能编译过的。但是如果 CMakeLists.txt 内容修改为如下,是编译不过的 cmake_minimum_required(VERSION 3.5) project(learn2) ...
如果还需要依赖外部目录(即不是主目录的子目录),就需要指定绝对路径,如下: #CMAKE_CURRENT_SOURCE_DIR上当CMake目录add_subdirectory(../3rdparty ${CMAKE_CURRENT_SOURCE_DIR}) 不指定绝对路径就会报如下错误: CMake Error at CMakeLists.txt:8 (add_subdirectory):add_subdirectory not given a binary directo...