16

私はGTestCMakeと可能な限りシームレスに統合しようとしています。しかし、私のテストプロジェクトのデフォルトのビルドタイプはで/MDdあり、GTestのデフォルトは/MTdです。デバッグDLLを発行するようにGTestプロジェクトのプロパティを手動で変更しています。

しかし、自分に変更を加えるたびにCMakeLists.txt、GTestはデフォルトでに戻り/MTdます。これを止めるにはどうすればよいですか?

4

4 に答える 4

34

これを実現するために、gtestを含める前にgtest_force_shared_crttoを定義できます。ONこれは、コマンドラインから実行できます。

cmake . -Dgtest_force_shared_crt=ON

またはあなたのCMakeLists.txt

set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
于 2012-09-22T17:54:26.133 に答える
14

より良いオプションは@Fraserの答えだと思います-その場合、cmake +gtest'はうまくいきます'。

内部gtestoption設定をオーバーライドするには、変数をcmakeキャッシュに配置する必要があることに注意してください。

set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" )
于 2014-05-03T02:47:00.500 に答える
6

Ted Middletonの答えが機能しない場合は、FORCEを使用してみてください。

set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)

それは私のために働いた

于 2015-12-17T12:51:43.017 に答える
1

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)
于 2012-09-22T12:51:48.543 に答える