我有这个代码项目可以独立构建,也可以作为更大存储库的子项目(将其作为子存储库检查)。在后一种情况下,我有一个主要项目的顶级CMakeLists.txt
add_subdirectory(${MY_SUBPROJ_SUBDIR})
现在,我希望子项目在the add_directory()
使用的情况下表现得有些不同。显然,我会使用大if
指令。但我检查的条件是什么?在运行某些CMakeLists.txt
时,如果它是一个子文件或主文件,CM怎么能告诉"
答案 0 :(得分:4)
项目的project()
和项目子目录中的CMakeLists.txt
调用后,您可以使用:
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
# I am top-level project.
else()
# I am called from other project with add_subdirectory().
endif()
使用之前>强调project()
电话:
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
# I am top-level project.
else()
# I am called from other project with add_subdirectory().
endif()
此替代方案也可用于项目CMakeLists.txt
中的任何位置(但不在子目录中)。
假设你有一个带有两个CMakeLists.txt
的项目 A :一个在项目目录中,一个在子目录src/
中。上述使用方案方法:
<强>的CMakeLists.txt 强>:
cmake_minimum_required(...)
...
<only approach *2* can be used there>
...
project(A)
...
<approach *1* or *2* can be used there>
...
add_subdirectory(src)
...
<强>的src /的CMakeLists.txt 强>:
...
<only approach *1* can be used there>
...
使用给定的方案项目 A 可以检测,它是独立构建的(顶级项目)还是另一个项目 B 的一部分。