我想写一个CMakeLists不仅可以用作子项CMakeLists也可以独立使用的程序。例如,在以下设置中
a
??? b
? ??? CMakeLists.txt
??? CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
和
$ cat a/CMakeLists.txt
add_subdirectory(b)
Run Code Online (Sandbox Code Playgroud)
但是,我还想制作a/b/CMakeLists.txt一个独立的 CMake 文件,可以直接由cmake. 特别是,a/b/CMakeLists.txt需要根据使用方式进行条件初始化。基本上是这样的:
$ cat a/b/CMakeLists.txt
IF_INCLUDED # dummy
DO_INIT()
ENDIF
# something else
Run Code Online (Sandbox Code Playgroud)
所以,我想知道
IF_INCLUDE(再次是虚拟的)谓词?我见过几次这样的设置,所以这肯定是人们做的事情。这种测试最常见的表述方式是:
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
Run Code Online (Sandbox Code Playgroud)
(或与二进制目录相同)。
CMAKE_SOURCE_DIR是包含顶层的目录CMakeLists.txt(最初调用 CMake的目录)。CMAKE_CURRENT_SOURCE_DIR是包含CMakeLists.txt当前正在处理的目录。如果它们相同,则保证当前的 CMakeList 是顶级的。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |