我想写一个CMakeLists
,它不仅可以作为子CMakeLists
使用,也可以单独使用。例如,在以下设置中
a
├── b
│ └── CMakeLists.txt
└── CMakeLists.txt
与
$ cat a/CMakeLists.txt
add_subdirectory(b)
但是,我还想让a/b/CMakeLists.txt
成为可以由cmake
直接使用的独立CMake文件。特别是,a/b/CMakeLists.txt
需要根据其使用方式执行条件初始化。基本上是这样的:
$ cat a/b/CMakeLists.txt
IF_INCLUDED # dummy
DO_INIT()
ENDIF
# something else
所以,我想知道
IF_INCLUDE
的谓词(再次,虚拟)?答案 0 :(得分:4)
我已经看过几次这样的设置,所以这肯定是人们做的事情。这种测试的最常见方式是:
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
(或与二进制目录相同)。
CMAKE_SOURCE_DIR
是包含toplevel CMakeLists.txt
的目录(最初调用CMake的目录)。 CMAKE_CURRENT_SOURCE_DIR
是包含当前正在处理的CMakeLists.txt
的目录。如果它们相同,则保证当前的CMakeList是顶级CMakeList。