2
私はライブラリ内のクラスの単体テストを作成しようとしています。ライブラリを構築し、 テストはCMakeで行います。コンパイルを二重にすることなくCMakeを使ったユニットテスト
├── CMakeLists.txt
├── src
│ ├── Bar.cpp
│ ├── CMakeLists.txt
│ └── Foo.cpp
└── test
├── BarTest.cpp
├── CMakeLists.txt
└── FooTest.cpp
src/CMakeLists.txt
は単にadd_library(Example Foo.cpp Bar.cpp)
です。 そして私は、私は変更を加えた場合test/CMakeLists.txt
は のように見えます。私はすでに仕事にBar
と の相互作用を持たずにそのユニットテストを実行することができFoo
を言うために、ライブラリ(すなわち を構築することなく、ユニットテストを構築したいと思いますので、この:
add_executable(FooTest FooTest.cpp ${CMAKE_SOURCE_DIR}/src/Foo.cpp)
add_test(bla::FooTest ${CMAKE_CURRENT_BINARY_DIR}/FooTest)
add_executable(BarTest BarTest.cpp ${CMAKE_SOURCE_DIR}/src/Bar.cpp)
add_test(bla::BarTest ${CMAKE_CURRENT_BINARY_DIR}/BarTest)
しかし、これは二回構築され、すべてのソース・ファイル内の結果:
[ 11%] Building CXX object src/CMakeFiles/Example.dir/Foo.o
[ 22%] Building CXX object src/CMakeFiles/Example.dir/Bar.o
[ 33%] Linking CXX static library libExample.a
[ 33%] Built target Example
[ 44%] Building CXX object test/CMakeFiles/FooTest.dir/FooTest.o
[ 55%] Building CXX object test/CMakeFiles/FooTest.dir/__/src/Foo.o
[ 66%] Linking CXX executable FooTest
[ 66%] Built target FooTest
[ 77%] Building CXX object test/CMakeFiles/BarTest.dir/BarTest.o
[ 88%] Building CXX object test/CMakeFiles/BarTest.dir/__/src/Bar.o
[100%] Linking CXX executable BarTest
[100%] Built target BarTest
が、それは、これを回避することが可能であるすなわち、私はsrc/Foo.cpp
Bを構築している場合は? 単体テストの場合は、ライブラリ用に再度ビルドしないでください。すべてのフラグは同じです。