16

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

但每次我对我CMakeLists.txt/MTd. 我该如何阻止这个?

4

4 回答 4

34

您可以在包含 gtest 之前定义gtest_force_shared_crttoON来实现这一点。您可以通过命令行执行此操作:

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 回答