2017-04-07 32 views
1

我想寫一個CMakeLists,它不僅可以用作子CMakeLists也可以是獨立的。例如,在下面設置測試是否使用CMakeLists.txt作爲子目錄

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(又是虛擬)的謂詞?
+0

可能的重複[在CMakeLists.txt中如何判斷它是否與add \ _subdirectory()一起使用?](http://stackoverflow.com/questions/42716466/how-can-i-tell-中之cmakelists-TXT-是否-其使用的與 - 加載子目錄) – Tsyvarev

回答

3

我見過這樣的設置幾次,所以它肯定是人們做的事情。這種測試最常用的方式是:

if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) 

(或二進制目錄相同)。

CMAKE_SOURCE_DIR是包含頂層CMakeLists.txt(最初調用CMake的那個)的目錄。 CMAKE_CURRENT_SOURCE_DIR是包含當前正在處理的CMakeLists.txt的目錄。如果它們相同,則保證當前的CMakeList是最高級的。

相關問題