2017-07-05 17 views
1

cmakeを入力してctest個の入力を生成する場合、cmakeによって生成されるCTestTestfile.cmakeの宛先ディレクトリを直接指定する方法はありますか。具体的には、私のテストスイートは独立したcmakeプロジェクトです。現在、include()というメインのcmakeプロジェクトに追加しますが、より適切な方法はadd_subdirectory()を使用することです。ただし、add_subdirectory()buildディレクトリにあるサブプロジェクトのディレクトリにCTestTestfile.cmakeをインストールしますが、の場合はbuild/で検索する必要があります。CTestTestfile.cmakeの宛先を指定してください

test_projectにあるファイルCTestList.cmakeにテストマクロを設定しました。このファイルはtest_project/CMakeLists.txtにビルドに含まれている:

include(CTest) 
include(${CMAKE_CURRENT_LIST_DIR}/CTestList.cmake) 

include()で:

project/ 
|-- CMakeLists.txt 
|-- src/ 
|-- test_project/ 
`-- build/ 
    |-- CTestTestfile.cmake 
    `-- test_project/ 

add_subdirectory()で:

project/ 
|-- CMakeLists.txt 
|-- src/ 
|-- test_project/ 
`-- build/ 
    `-- test_project/ 
     `-- CTestTestfile.cmake 
+0

'CTestTestfile.cmake'を生成するコードの部分を表示できますか? – Akira

+0

テスト実行スクリプトの入力引数prepをすべて処理する 'CTestList.cmake'があります。 'CTestList.cmake'は最終的にcmakeコマンド' add_test() 'を呼び出します。 'test_project/CMakeLists.txt'には、あなたの応答のために' CTestList.cmake' – raf

+0

@Akiraが含まれています。私は詳細をつけて質問を更新しました。 – raf

答えて

2

includeCMakeadd_subdirectoryコマンドは非常に異なっています。 Cの#includeやC++のような– includeコマンド動作しますが

add_subdirectoryは、ビルドにサブディレクトリを追加し、それが–を表示されたファイルに含まれるファイルの内容をロードします。つまり、add_subdirectoryを使用すると、サブディレクトリ内の変数CMakeLists.txtは異なるスコープの一部になり、CMAKE_CURRENT_BINARY_DIR変数の値も異なります。ただ、test_project/CMakeLists.txtに次の行を追加し、includeにそれをどちらかを試したりadd_subdirectoryことによってそれを追加します。

message(STATUS "The files will be generated into: " ${CMAKE_CURRENT_BINARY_DIR}) 

enable_testingは、以下の現在のディレクトリとのテストを可能にします。したがって、includeの代わりにadd_subdirecoryを使用した場合、の現在のディレクトリは、上記のようにbuild/test_project/ –を意味しました。

単にトップレベルCMakeLists.txtに余分enable_testingコマンドを追加し、CTestTestfile.cmakeがあまりにもbuildディレクトリに作成されますことを確認します。

+1

大きな説明に感謝します。 'include(CTest)'が 'enable_testing'を呼び出すという将来の参考になることは注目に値するでしょう。しかしここでの主なポイントは、 'enable_testing'がcmakeで呼び出されるポイントです。微妙だが大きな。 – raf

関連する問題