How to make GTest build /MDd (instead of /MTd) by default, using CMake?
If Ted Middleton's answer doesn't work, try to use FORCE:
set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
It worked for me
We solved the problem by bypassing GTest's own build system and compiling GTest as a CMake object library from its unity build source file 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")
That way GTest will always be compiled with the same options that we use for the project. A test executable that uses GTest can then be built in the following way:
add_executable(test_executable ${TESTS_SRC} $<TARGET_OBJECTS:gtest>)
add_test(NAME test COMMAND test_executable)
You can define gtest_force_shared_crt
to ON
before including gtest to achieve this. You can either do this via the command line:
cmake . -Dgtest_force_shared_crt=ON
or in your CMakeLists.txt
:
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
I think a better option is @Fraser's answer - in that case, cmake + gtest 'just work'.
It's worth mentioning that in order to override the internal gtest option
setting, you need to put the variable in the cmake cache:
set( gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" )