在 CMake 中,${CMAKE_CURRENT_BINARY_DIR}
变量代表当前 CMakeLists.txt 文件的二进制目录。它是在 CMake 处理子目录时动态更新的,因此在子目录中使用 ${CMAKE_CURRENT_BINARY_DIR}
时,指的是该子目录对应的二进制目录,而不是根目录的二进制目录。
具体解释
-
二进制目录:
- CMake 生成的文件(如 Makefile 或 Visual Studio 项目文件)以及编译后的输出文件(如目标文件、可执行文件等)都存储在这个目录中。
- 通常情况下,构建目录是从源目录分开的,通常在一个名为
build
的子目录中。
-
在子目录中的使用:
- 当你在根目录的 CMakeLists.txt 中调用
add_subdirectory(subdir)
时,CMake 会进入subdir
目录并处理subdir/CMakeLists.txt
文件。在这个子目录中,${CMAKE_CURRENT_BINARY_DIR}
将指向subdir
目录对应的二进制输出路径。
- 当你在根目录的 CMakeLists.txt 中调用
例子
假设你的项目结构如下:
my_project/
├── CMakeLists.txt # 根 CMakeLists.txt
├── subdir/
│ └── CMakeLists.txt # 子目录中的 CMakeLists.txt
└── build/ # 构建目录
- 如果在根目录的
CMakeLists.txt
中添加了:add_subdirectory(subdir)
- 然后在
subdir/CMakeLists.txt
中使用${CMAKE_CURRENT_BINARY_DIR}
,它将指向build/subdir
,而不是build
。
总结
${CMAKE_CURRENT_BINARY_DIR}
在子目录中的值代表了该子目录对应的二进制输出目录。它是相对当前处理的 CMakeLists.txt 文件的上下文变化而变化的,有助于组织和管理构建输出。