私はGTestをCMakeと可能な限りシームレスに統合しようとしています。しかし、私のテストプロジェクトのデフォルトのビルドタイプはで/MDd
あり、GTestのデフォルトは/MTd
です。デバッグDLLを発行するようにGTestプロジェクトのプロパティを手動で変更しています。
しかし、自分に変更を加えるたびにCMakeLists.txt
、GTestはデフォルトでに戻り/MTd
ます。これを止めるにはどうすればよいですか?
私はGTestをCMakeと可能な限りシームレスに統合しようとしています。しかし、私のテストプロジェクトのデフォルトのビルドタイプはで/MDd
あり、GTestのデフォルトは/MTd
です。デバッグDLLを発行するようにGTestプロジェクトのプロパティを手動で変更しています。
しかし、自分に変更を加えるたびにCMakeLists.txt
、GTestはデフォルトでに戻り/MTd
ます。これを止めるにはどうすればよいですか?
これを実現するために、gtestを含める前にgtest_force_shared_crt
toを定義できます。ON
これは、コマンドラインから実行できます。
cmake . -Dgtest_force_shared_crt=ON
またはあなたのCMakeLists.txt
:
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
より良いオプションは@Fraserの答えだと思います-その場合、cmake +gtest'はうまくいきます'。
内部gtestoption
設定をオーバーライドするには、変数をcmakeキャッシュに配置する必要があることに注意してください。
set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" )
Ted Middletonの答えが機能しない場合は、FORCEを使用してみてください。
set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
それは私のために働いた
GTest独自のビルドシステムをバイパスし、GTestをユニティビルドソースファイルからCMakeオブジェクトライブラリgtest-all.cc
としてコンパイルすることで、問題を解決しました。
# compile Google Test as an object library
add_library(gtest OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0/src/gtest-all.cc")
set_property(TARGET gtest PROPERTY INCLUDE_DIRECTORIES
"${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0"
"${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0/include")
そうすれば、GTestは常にプロジェクトで使用するのと同じオプションでコンパイルされます。次に、GTestを使用するテスト実行可能ファイルを次の方法でビルドできます。
add_executable(test_executable ${TESTS_SRC} $<TARGET_OBJECTS:gtest>)
add_test(NAME test COMMAND test_executable)