https://qa.1r1g.com/sf/ask/3723663051/
CMAKE_SOURCE_DIR是cmake最初被调用的位置,CMAKE_CURRENT_SOURCE_DIR也是cmake当前正在工作的位置。例如,如果使用add_subdirectory命令将依赖项包含到项目中,则依赖项将具有自己的依赖项,CMAKE_CURRENT_SOURCE_DIR但CMAKE_SOURCE_DIR将保持不变。
展开一些程序员花花公子的评论,想象一下您在项目的不同目录中具有以下三个CMakeFiles
CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
message("root dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("root dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
add_subdirectory(sub1)
add_subdirectory(sub2)
Run Code Online (Sandbox Code Playgroud)
sub1 / CMakeLists.txt
message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
Run Code Online (Sandbox Code Playgroud)
sub2 / CMakeLists.txt
message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
Run Code Online (Sandbox Code Playgroud)
cmake .在根目录上运行会给我这个输出
root dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
root dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub2 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub2 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub2
Run Code Online (Sandbox Code Playgroud)
现在,如果我cmake .在sub1目录上运行,则两个变量的值相同:
sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
Run Code Online (Sandbox Code Playgroud)
浙公网安备 33010602011771号