25

CMake test (Ctest) との Catch CatchLib統合の成功例を探しています。私が理解しているように、これはアプリケーションの出力を解析する必要がある追加の cmake スクリプトですか? 誰かがすでにこれを書いていますか?おそらくこれを共有しましたか?

==================================================

更新(解決策が見つかりました):

Catch と CTest の統合のために、 cmake スクリプトを CatchLib にコミットしました。これは、Fraser99 の cmake スクリプトの簡略版です。

4

2 に答える 2

42

Catch はヘッダーのみのライブラリであるため、CMake との統合は比較的簡単です。

ここにあなたがしなければならないことの簡単な要約があります:

Catch ソースがビルド マシンに既にインストールされていると想定するか、ExternalProjectを使用してビルド プロセスの一部としてフェッチすることができます。

いずれの場合も、ビルド マシン上の既知のディレクトリに Catch ヘッダー ファイルが作成されます。この情報をテスト実行可能ファイルに知らせるために、インターフェイス ターゲットを作成することをお勧めします。

add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})

そうすれば、 Catch を への依存関係として簡単に指定できますtarget_link_libraries

add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test PUBLIC Catch)

CMake でいつものように、add_testCTest へのテストの導入を処理します。

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

そして、それはすでにそれです。ビルドされたプロジェクトで実行make testして、テストを実行します。

完全な動作例を見る必要がある場合は、Githubにこれを行うプロジェクトがあります。

Catch の新しいバージョンの更新:既に Catch2 にアップグレードしている場合は、Catch2 に独自のパッケージ構成ファイルが付属しているため、呼び出して統合することができますfind_package。これにより、全体的にスムーズな CMake 統合が提供され、独自のインターフェイス ターゲットの定義を開始する必要がなくなります。上記のアプローチは Catch2 でも機能しfind_packageますが、Catch バージョンが既にサポートしている場合は使用することをお勧めします。

于 2016-01-20T12:24:40.707 に答える
6

以下を使用してキャッチをインストールします。

 $ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
 $ mkdir <catch_bin_dir>
 $ cd <catch_bin_dir>
 $ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
 $ make
 $ make install

次に、CMakeLists.txt に以下を追加します。

find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)

ここを参照してください。

于 2017-02-26T01:05:41.813 に答える