0

MyLib次の構造を持つC++ ライブラリを作成しました。

MyLib/
  |-- Module1/
       |-- SubModule1/
             |-- Tests/
                  |-- .cpp files (unit tests)
             |-- .cpp files (library sources)
       |-- Tests/
             |-- .cpp files (unit tests)
       |-- .cpp files (library sources)
  |-- Module2/
       |-- Tests/
             |-- .cpp files (unit tests)
       |-- .cpp files (library sources)
  |-- ...
  |-- CMakeLists.txt

つまり、ライブラリのソース ファイルは多くのディレクトリとサブディレクトリに分散されています。Tests各ディレクトリには、親ディレクトリ内のモジュールの単体テストを含むディレクトリ が含まれる場合があります。

CMake v2.8 を使用してライブラリ ( MyLib.a) とこのライブラリの単体テスト ( という名前の実行可能ファイル)をビルドしていますMyLibTests。これらは、これを達成するために使用する関連ルールです。

# Build MyLib.
file(GLOB_RECURSE MyLib_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
# Filter out source files of unit tests.
foreach(ITEM ${MyLib_SOURCES})
    if(${ITEM} MATCHES Tests/*)
        list(REMOVE_ITEM MyLib_SOURCES ${ITEM})
    endif()
endforeach()
add_library(MyLib STATIC ${MyLib_SOURCES})

# Build MyLibTests.
file(GLOB_RECURSE MyLib_TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
# Filter out non-unit-tests source files.
foreach(ITEM ${MyLib_TESTS_SOURCES})
    if(NOT ${ITEM} MATCHES Tests/*)
        list(REMOVE_ITEM MyLib_TESTS_SOURCES ${ITEM})
    endif()
endforeach()
add_executable(MyLibTests ${MyLib_TESTS_SOURCES})
target_link_libraries(MyLibTests MyLib ${UNIT_TESTS_FRAMEWORK_LIBS})

.cppライブラリを形成するファイルと.cpp、このライブラリの単体テストであるファイルを見つけるより良い方法はありますか? それができるという適切な表現を思いつくことができませんでしfile(GLOB_RECURSE ...)た。

4

0 に答える 0