4

私は小さいながらも自明ではないプロジェクトを持っています。これはアーキテクチャ上の理由から 3 つの別々のプロジェクトとして構築されており、相互に依存しているため、特に集中したり、穴を見つけてテスト カバレッジを改善したりしない限り、それは理にかなっています。プロジェクトのルートから作業します。

レイアウトは次のとおりです。

/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/

アーキテクチャに関する言葉libmyprojectは、私のアプリケーションの真髄です。CLI はライブラリとしてコードをエンドユーザーに出荷する恐ろしい方法であるため、このように構築されています。C# および Objective-C アプリケーションからも使用されます。(そしてすべてが期待どおりに機能します)

libmyotherprojectプラットフォーム固有のサポート コードであり、 に直接接続されていませんlibmyproject。いくつかの単体テストがあります。

のすべてに単体テストがvlc-pluginあるわけではないことを示す以外は、ここでは重要ではありません。/src/*/

私のワークフローは通常、何か役に立つものが見つかるまで CLI アプリをハッキングし、それをライブラリにリファクタリングして、移植可能であることを確認することです。

で作業している場合/src/*/build/、通常は を実行しているcmake ../ && make && ctest --output-on-failure場合、すべてが機能します。

で作業していて/buildを実行するcmakeと、個々のコンポーネントはadd_subdirectories()CMake から ( を使用して)正しくビルドされますがCTest、再帰的にテストを見つけることはできません。

のドキュメントCTestは、何をすべきかについて少し役に立ちません。

USAGE
         ctest [options]

DESCRIPTION
       The  "ctest"  executable is the CMake test driver program.  CMake-generated build trees created for
       projects that use the ENABLE_TESTING and ADD_TEST commands have testing support.  This program will
       run the tests and report results.

ADD_TEST()コールが にあるので、コールが実行されることを期待/src/libmyotherproject/tests/CMakeLists.txtしていたでしょうか? cmake(から実行すると、少なくともコンパイルされます/build/)

十分な情報を提供できたと思います。ありがとうございます。

4

1 に答える 1

5

置く

include(CTest)

add_subdirectory 呼び出しを行う前に、最上位の CMakeLists.txt ファイルで。

これにより enable_testing が呼び出され、プロジェクトで ctest ダッシュボード スクリプトを実行して結果を CDash サーバーに送信する場合の設定も行われます。

于 2012-11-08T15:12:46.217 に答える