add_executable(testmain.cpp) 在父目录下调用cmake .构建之后,在output目录或sub目录下不会出现libsub.a库,说明当指定EXCLUDE_FROM_ALL选项,子目录的目标文件不会生成。 场景4:父目录CMakeLists.txt的add_subdirectory指定了EXCLUDE_FROM_ALL选项,且父目录的目标文件依赖子目录的目标文件。 # 父目录下的CMakeList...
add_subdirectory(sub output EXCLUDE_FROM_ALL) add_executable(test main.cpp) target_link_libraries(test sub) 1. 2. 3. 4. 5. 6. 7. 在父目录下调用cmake .构建之后,在output目录会出现libsub.a库,说明即使指定EXCLUDE_FROM_ALL选项,当父目录目标文件对子目录目标文件存在依赖关系时,子目录的目标文件...
CMake允许通过add_subdirectory命令将这些目录包含进项目中,并且仍然可以使用add_dependencies来定义跨目录的目标依赖。 1.3.1 使用add_subdirectory命令(Using the add_subdirectory Command) add_subdirectory命令使得CMake可以处理子目录中的CMakeLists.txt文件,从而将子目录下的目标加入到整个项目构建中。 1.3.2 跨目录...
有的第三方库对 CMake 过于友好,可以直接复制整个源码到当前项目,然后使用add_subdirectory()将其作为子项目参与生成和编译,然后在其它子项目中使用,无论本地项目有没有依赖这个子项目,它都会被生成和编译。 例如spdlog 支持如下两种风格的使用: 作为外部项目,安装后导入 ...
此外需要注意的是,因为add_subdirectory增加的构建子目录,CMake构建工程会自动将该子目录添加到编译和链接的搜索目录中,以保证整个构建工程能满足依赖,这也是为什么使用add_subdirectory后不需要将子文件夹加入到头文件或库文件搜索目录也能搜索到子目录的头文件或库文件。
对于源码发布的项目来说,子目录依赖是最简单的方式。如果你的依赖也是 CMake 写的项目文件,你可以使用add_subdirectory引入依赖中定义的构建目标(Target)。 一个常见的用法是使用git submodule把依赖作为子模块加入到 repo 中,然后用add_subdirectory直接添加。当然,你想直接拷贝一份代码到你的项目里也是可以的,只是以...
如果依赖是通过add_subdirectory添加的,那么find_package的时候会报错找不到xxx-config.cmake。 实际上通过add_subdirectory添加的话,对应的target已经存在了。所以我们可以直接判断如果target已经存在就跳过find_package: if(NOTTARGET依赖1)find_package(依赖1CONFIG REQUIRED)endif() ...
CMake中的add_subdirectory命令用于将子目录添加到构建,其格式如下: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM]) 1. source_dir指定源CMakeLists.txt和代码文件所在的目录。如果它是相对路径,则将相对于当前目录(典型用法)对其进行评估,但它也可能是绝对路径。binary_dir指定放置输出...
DownloadProject:配置时运行,可以add_subdirectory; FetchContent (CMake 3.11+):方案二的官方版本,更简便一些,只是在比较高的版本才有,鉴于目前大部分机器上的 CMake 版本比较低,可能会要求用户升级后才能使用; 目前,我在团队项目中,使用的是 ExternalProject,为什么?因为单独作为一个步骤,这样可以预先编译好各个平台...
#只需要传入相对主目录的相对路径`sub1`add_subdirectory(sub1) 如果还需要依赖外部目录(即不是主目录的子目录),就需要指定绝对路径,如下: #CMAKE_CURRENT_SOURCE_DIR上当CMake目录add_subdirectory(../3rdparty ${CMAKE_CURRENT_SOURCE_DIR}) 不指定绝对路径就会报如下错误: ...