CMake变量全解析
一、编写这样一个宏:
macro(TEST name)
message(STATUS "${name}:")
message(STATUS "PROJECT_SOURCE_DIR IS ${PROJECT_SOURCE_DIR}")
message(STATUS "PROJECT_BINARY_DIR IS ${PROJECT_BINARY_DIR}")
message(STATUS "CMAKE_SOURCE_DIR IS ${CMAKE_SOURCE_DIR}")
message(STATUS "CMAKE_BINARY_DIR IS ${CMAKE_BINARY_DIR}")
message(STATUS "CMAKE_CURRENT_SOURCE_DIR IS ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "CMAKE_CURRENT_BINARY_DIR IS ${CMAKE_CURRENT_BINARY_DIR}")
endmacro()
二、在每个CMakeLists.txt文件中调用
1.每个CMake项目均会有一个CMakeLists.txt -父
2.在顶层中包含子CMakeLists.txt -子
3.重复1-2
4.最终构成实际项目
三、运行CMake查看输出结果
四、结论
1.CMAKE_SOURCE_DIR : 不变的量 始终是最顶层项目目录
2.CMAKE_BINARY_DIR : 不变的量 最顶层项目构建目录
3.PROJECT_SOURCE_DIR : 变量 最近层(父->子)调用project(XXX) 后XXX的目录
4.PROJECT_BINARY_DIR : 变量 最近层(父->子)调用project(XXX) 后根据CMAKE_BINARY_DIR设置的变量
5.CMAKE_CURRENT_SOURCE_DIR: 变量 一般调用set(CMAKE_INCLUDE_CURRENT_DIR ON)才会自动更新设置为当前CMakeLists.txt所在源目录
6.CMAKE_CURRENT_BINARY_DIR : 变量 最近层(父->子)调用project(XXX) 后根据CMAKE_BINARY_DIR设置的变量
五、看明白了吗
最近倒腾CMake被这些变量搞毛了,看原版英文反复折腾才搞明白,希望你看到这篇文章后能有所收获,少走弯路吧。