如何使用CMake默认制作GTest build/MDd(而不是/ MTd)?

Hin*_*dol 10 cmake googletest visual-c++

我试图尽可能无缝地集成GTestCMake.但我的测试项目的默认构建类型是/MDdGTest默认的/MTd.我手动更改GTest项目属性以发出调试DLL.

但是每当我对我做出更改时CMakeLists.txt,GTest都会默认返回/MTd.我怎么阻止这个?

Fra*_*ser 23

您可以定义gtest_force_shared_crtON包括GTEST实现这一目标之前.您可以通过命令行执行此操作:

cmake . -Dgtest_force_shared_crt=ON
Run Code Online (Sandbox Code Playgroud)

或在你的CMakeLists.txt:

set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
Run Code Online (Sandbox Code Playgroud)

  • 您应该添加下面泰德·米德尔顿的更正。正如您所建议的,添加 set() 行对 gtest 构建没有影响。 (2认同)

Ted*_*ton 13

我认为更好的选择是@Fraser的答案 - 在这种情况下,cmake + gtest'正常工作'.

值得一提的是,为了覆盖内部gtest option设置,您需要将变量放在cmake缓存中:

set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" )
Run Code Online (Sandbox Code Playgroud)

  • 也应指定"FORCE",请参阅https://github.com/google/googletest/blob/master/googletest/README.md. (2认同)

小智 5

如果Ted Middleton的答案不起作用,请尝试使用FORCE:

set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
Run Code Online (Sandbox Code Playgroud)

它对我有用