Build CMAKE\u CURRENT\u SOURCE\u DIR和;CMAKE\u源\u目录变量?

Build CMAKE\u CURRENT\u SOURCE\u DIR和;CMAKE\u源\u目录变量?,build,cmake,Build,Cmake,据我所知,这些变量用于项目由子目录组成的情况,例如,每个子目录都有CMakeLists.txt文件 CMAKE\u当前\u源\u目录 指正在处理的源控制器的路径? 及 CMAKE_源目录 指最顶层的源目录? 我不确定 CMAKE\u SOURCE\u DIR是最初调用CMAKE的地方,CMAKE\u CURRENT\u SOURCE\u DIR是CMAKE当前工作的地方。例如,如果使用add_subdirectory命令将依赖项包含到项目中,则依赖项将有自己的CMAKE_CURRENT_SOUR

据我所知,这些变量用于项目由子目录组成的情况,例如,每个子目录都有CMakeLists.txt文件

CMAKE\u当前\u源\u目录

指正在处理的源控制器的路径? 及

CMAKE_源目录

指最顶层的源目录?
我不确定

CMAKE\u SOURCE\u DIR
是最初调用CMAKE的地方,
CMAKE\u CURRENT\u SOURCE\u DIR
是CMAKE当前工作的地方。例如,如果使用
add_subdirectory
命令将依赖项包含到项目中,则依赖项将有自己的
CMAKE_CURRENT_SOURCE_DIR
CMAKE_SOURCE_DIR
将保持不变

扩展一些程序员的评论,想象一下您在项目的不同目录中有以下三个CMAKE文件

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)
message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
sub1/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)
message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
sub2/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)
message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
在根目录上运行
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
现在,如果我在sub1目录上运行
cmake.
,我会得到两个变量的相同值:

sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1

你为什么不把它们打印在不同的目录里,看看它们是什么?例如,
消息(“CMAKE\u SOURCE\u DIR=${CMAKE\u SOURCE\u DIR}”)
@Someprogrammerdude你是一个了不起的人(Y)