有很多关于如何从CMake在Visual Studio中设置运行时库的帖子,但就我而言,似乎Visual Studio忽略了我的设置。
我想用/MD
构建google-mock。这是项目中的默认设置。
在一个新的构建目录中,使用:
构建cmake -G "Visual Studio 12 2013" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\Users\mrussell\workspace\opal2\o2win32\Libs\gtest\"1.7.0" -DCMAKE_CXX_FLAGS_RELEASE="/MD /O2 /Ob2 /D NDEBUG" ../googlemock
我所有的cmake变量似乎都是正确的
然而,当我去构建时,无论是通过命令行(我习惯于linux ..)还是从Visual Studio,它都使用/MT
标志。
我的构建命令(以32位为目标):
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
msbuild /m:4 /property:Configuration=%build_type% ALL_BUILD.vcxproj
输出:
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe /c /IC:\Users\mrussell\workspace\opal2\o2win32\Libs\gtest\g
test\include /IC:\Users\mrussell\workspace\opal2\o2win32\Libs\gtest\gtest /Zi /nologo /W4 /WX /O2 /Ob2 /Oy- /D WIN32 /D _WIND
OWS /D NDEBUG /D WIN32 /D _WINDOWS /D _UNICODE /D UNICODE /D WIN32 /D _WIN32 /D STRICT /D WIN32_LEAN_AND_MEAN /D GTEST_HAS_PT
HREAD=0 /D _HAS_EXCEPTIONS=1 /D "CMAKE_INTDIR=\"Release\"" /D _UNICODE /D UNICODE /Gm- /EHsc /MT /GS /fp:precise /Zc:wchar_t
/Zc:forScope /GR /Fo"gtest.dir\Release\\" /Fd"gtest.dir\Release\vc120.pdb" /Gd /TP /wd4127 /wd4251 /wd4275 /analyze- /errorRe
port:queue -J "C:\Users\mrussell\workspace\opal2\o2win32\Libs\gtest\gtest\src\gtest-all.cc"
(注意隐藏在那里的/MT
。)
在Visual Studio中,我打开解决方案,选择发布类型Release
,并在任何目标中,例如gtest
,Properties
- > Configuration Properties
- > C/C++
- > Code Generation
,Runtime Library
设置为/MT
,而不是{CALke文件中设置的/MD
。
如果我尝试构建google-test(1.7.0)
,也会发生同样的事情我只是不明白如何设置这些?或者有没有办法强制Visual Studio使用正确的标志而无需手动打开Visual Studio并进行设置?
答案 0 :(得分:1)
google-test
和google-mock
的CMake构建系统表现不佳。它们不遵循用户设置的编译选项和运行时选项,并且有理由覆盖那些他们认为合理用于测试目的的选项。
要阻止用MD
替换MT
,您可以在CMake缓存中将选项gtest_force_shared_crt
设置为ON
。但是,无条件地修改其他编译选项(例如警告)。