私は小さいながらも自明ではないプロジェクトを持っています。これはアーキテクチャ上の理由から 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/)
十分な情報を提供できたと思います。ありがとうございます。