2017-04-07 2 views
1

CMakeListsと書いて、CMakeListsもスタンドアロンとして使用できるだけでなく、例えば、CMakeLists.txtがサブディレクトリとして使用されているかどうかをテストしてください

$ cat a/CMakeLists.txt 
add_subdirectory(b) 

と次のセットアップ

a 
├── b 
│   └── CMakeLists.txt 
└── CMakeLists.txt 

にしかし、私はまたcmakeで直接使用することができa/b/CMakeLists.txtスタンドアロン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がトップレベルのものであることが保証されます。

関連する問題