在父目录下调用cmake .构建之后,在output目录或sub目录下不会出现libsub.a库,说明当指定EXCLUDE_FROM_ALL选项,子目录的目标文件不会生成。 场景4:父目录CMakeLists.txt的add_subdirectory指定了EXCLUDE_FROM_ALL选项,且父目录的目标文件依赖子目录的目标文件。 # 父目录下的CMakeLists.txtcmake_minimum_required(V...
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选项,且父目录的目标文件依赖子目录的目标文件。
add_executable(test main.cpp) 在父目录下调用cmake .构建之后,在output目录或sub目录下不会出现libsub.a库,说明当指定EXCLUDE_FROM_ALL选项,子目录的目标文件不会生成。 场景4:父目录CMakeLists.txt的add_subdirectory指定了EXCLUDE_FROM_ALL选项,且父目录的目标文件依赖子目录的目标文件。 # 父目录下的CMakeLi...
有的第三方库对 CMake 过于友好,可以直接复制整个源码到当前项目,然后使用add_subdirectory()将其作为子项目参与生成和编译,然后在其它子项目中使用,无论本地项目有没有依赖这个子项目,它都会被生成和编译。 例如spdlog 支持如下两种风格的使用: 作为外部项目,安装后导入 ...
CMake中的add_subdirectory命令用于将子目录添加到构建,其格式如下: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM]) 1. source_dir指定源CMakeLists.txt和代码文件所在的目录。如果它是相对路径,则将相对于当前目录(典型用法)对其进行评估,但它也可能是绝对路径。binary_dir指定放置输出...
CMake-find-package兼容add-subdirectory 如果依赖是通过add_subdirectory添加的,那么find_package的时候会报错找不到xxx-config.cmake。 实际上通过add_subdirectory添加的话,对应的target已经存在了。所以我们可以直接判断如果target已经存在就跳过find_package:
1.3.1 使用add_subdirectory命令(Using the add_subdirectory Command) add_subdirectory命令使得CMake可以处理子目录中的CMakeLists.txt文件,从而将子目录下的目标加入到整个项目构建中。 1.3.2 跨目录建立依赖关系(Establishing Cross-Directory Dependencies)
对于源码发布的项目来说,子目录依赖是最简单的方式。如果你的依赖也是 CMake 写的项目文件,你可以使用add_subdirectory引入依赖中定义的构建目标(Target)。 一个常见的用法是使用git submodule把依赖作为子模块加入到 repo 中,然后用add_subdirectory直接添加。当然,你想直接拷贝一份代码到你的项目里也是可以的,只是以...
DownloadProject:配置时运行,可以add_subdirectory; FetchContent (CMake 3.11+):方案二的官方版本,更简便一些,只是在比较高的版本才有,鉴于目前大部分机器上的 CMake 版本比较低,可能会要求用户升级后才能使用; 目前,我在团队项目中,使用的是 ExternalProject,为什么?因为单独作为一个步骤,这样可以预先编译好各个平台...
然后,你需要在你的 CMakeLists.txt 中,加入额外的配置步骤,如果项目的 CMakeLists.txt 支持当做模块,你可以直接添加为子目录:add_subdirectory(extern/opencv)。 我尝试过这种方式,但是遇到了一时无法解决的交叉编译的问题,就放弃了,因为有些项目写的 CMakeLists.txt 并不标准,不支持它作为其它项目的子模块,并且...