Build CMAKE\u CURRENT\u SOURCE\u DIR和;CMAKE\u源\u目录变量?
据我所知,这些变量用于项目由子目录组成的情况,例如,每个子目录都有CMakeLists.txt文件 CMAKE\u当前\u源\u目录 指正在处理的源控制器的路径? 及 CMAKE_源目录 指最顶层的源目录?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
我不确定
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)