默认情况下,CMake会查找在`CMAKE_PREFIX_PATH`、`CMAKE_MODULE_PATH`和`CMAKE_SOURCE_DIR`指定的目录。 但是,有时你可能想引用一个位于当前源代码目录的头文件。在这种情况下,你可以使用`set(cmake_include_current_dir ON)`来告诉CMake在查找头文件时也包括当前目录。 例如,假设你有以下目录结构: ```lua...
include()没有引入新的变量范围,而add_subdirectory()引入了。 默认情况下,这两个命令都引入了一个新的策略范围,但是可以使用NO_POLICY_SCOPE选项告诉include()命令不要这样做(add_subdirectory()没有这样的选项)。 CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_BINARY_DIR变量的值在处理由include()命名的文件时不会...
CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE变量可以用来控制是否将目录加入INTERFACE_INCLUDE_DIRECTORIES目标属性中。这使得通过target_link_libraries()指令可以方便地使用多个不同目录下的目标。 构建需求传递 目标的构建需求可以通过依赖传递。target_link_libraries()指令可以通过PRIVATE,INTERFACE和PUBLIC关键字来控制传递。
当我们在选择使用${CMAKE_CURRENT_BINARY_DIR}而非${CMAKE_BINARY_DIR}时,我们实际上是在强调当前处理的 CMakeLists.txt 文件的上下文。正如哲学家路德维希·维特根斯坦(Ludwig Wittgenstein)在《逻辑哲学论》中所说:“世界的界限是我的视野的界限。”${CMAKE_BINARY_DIR}指向顶级构建目录,而${CMAKE_CURRENT_BI...
在CMake中,include指令是一个非常重要的工具,它允许你将构建逻辑分散到多个文件中,使得项目的构建脚本更加清晰和可维护。通过使用include指令,你可以将公共的、模块化的构建逻辑封装到单独的文件中,并在需要的地方引用它们。 基本用法 include指令的基本语法很简单,你只需要指定要包含的文件名或路径即可。例如: include...
MESSAGE(STATUS “HOME dir: $ENV{HOME}”) 设置环境变量的方式是: SET(ENV{变量名} 值) 1,CMAKE_INCLUDE_CURRENT_DIR 自动添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 到当前处理 的CMakeLists.txt。相当于在每个 CMakeLists.txt 加入: ...
CMake 将首先去执行source_dir目录下的CMakeLists.txt,结束后再转回当前命令的下一行继续执行 调用add_subdirectory将导致在源码树中建立一个新结点,可以通过CMAKE_CURRENT_SOURCE_DIR获取到当前处理结点的完整路径 binary_dir 选项binary_dir用于指定子目录的输出应该放置在哪里,通常是相对于当前输出目录的相对路径,但...
CMAKE_INCLUDE_CURRENT_DIR :自动添加CMAKE_CURRENT_BINARY_DIR 和CMAKE_CURRENT_SOURCE_DIR 到当前处理的CMakeLists.txt PRIVATE: 将链接只用于当前目标,相当于.c包含,对外的.h不包含 INTERFACE: 将链接只用于依赖于当前目标的文件,当前目标不使用; 相当于.c不使用,对外的.h使用 ...
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) 这个指令用于向当前工程添加存放源文件的子目录 可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL 参数的含义是将这个目录从编译过程中排除 9.SUBDIRS 指令 这个指令已经不推荐使用 ...