测试CMakeLists.txt是否用作子目录

时间:2017-04-07 15:04:49

标签: cmake

我想写一个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

所以,我想知道

  1. 这是人们会做的吗?
  2. 是否有类似上述IF_INCLUDE的谓词(再次,虚拟)?

1 个答案:

答案 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。