CMAKE_CURRENT_SOURCE_DIRとCMAKE_CURRENT_LIST_DIRの違い


105

Wikiから:

CMAKE_CURRENT_SOURCE_DIR これは、現在処理されているCMakeLists.txtがあるディレクトリです。

CMAKE_CURRENT_LIST_DIR (2.8.3以降)これは、現在処理されているリストファイルのディレクトリです。

ドキュメントから:

CMAKE_CURRENT_SOURCE_DIR:現在処理中のソースディレクトリへのパス。これは、現在cmakeによって処理されているソースディレクトリへの完全パスです。

CMAKE_CURRENT_LIST_DIR:現在処理中のリストファイルの完全なディレクトリ。CMakeがプロジェクトのリストファイルを処理するとき、この変数は常に、現在処理されているリストファイル(CMAKE_CURRENT_LIST_FILE)が配置されているディレクトリに設定されます。値には動的スコープがあります。CMakeは、ソースファイル内のコマンドの処理を開始すると、この変数をこのファイルが配置されているディレクトリに設定します。CMakeは、ファイルからのコマンドの処理を完了すると、以前の値を復元します。したがって、マクロまたは関数内の変数の値は、マクロまたは関数の定義を含むファイルのディレクトリではなく、呼び出しスタックの一番下のエントリを呼び出すファイルのディレクトリです。

これらの変数はどのような状況で異なる値を保持しますか?


10
そして、彼らはシンプルで素敵なものとどう違うのです./か?
kyb 2017年

回答:


138

変数CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_LIST_DIRして別のファイルに含まれているCMakeのリストファイル用に別のディレクトリを参照することが含まれるコマンドを。たとえば、a CMakeLists.txtがディレクトリに存在しproject、次のディレクティブが含まれている場合

include(src/CMakeLists.txt)

次いでながらsrc/CMakeLists.txt処理されていることCMAKE_CURRENT_LIST_DIRに言及するproject/src一方、CMAKE_CURRENT_SOURCE_DIR依然として外ディレクトリを指しますproject

CMAKE_CURRENT_LIST_DIRCMakeLists.txt現在処理中のファイルの横にあるテンプレートファイルやバッチスクリプトなどのリソースファイルを見つける必要がある場合に便利です。


42
+1。私はCMAKE_CURRENT_LIST_DIRあなたのすべてのファイルでその変更を追加しますinclude()。呼び出す必要はありませんCMakeLists.txt
Angewは、2013

2
ここでは良い議論効果的に使用する方法についてCMAKE_CURRENT_LIST_DIRinclude(...)プロジェクトインチ
jmcarter9t 2017

1
はドキュメントが示唆するよりもCMAKE_CURRENT_SOURCE_DIR似ているため、簡単に混乱しCMAKE_SOURCE_DIRます。
マラキ

そしてadd_subdirectory()?両方の変数はフォルダーを指しますか?
アインポクルム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.