有许多关于如何在CMake中设置Visual Studio中运行时库的文章,但在我的案例中,似乎Visual Studio忽略了我的设置。Visual Studio似乎忽略了cmake中设置的运行时库
我想用/MD
建立google-mock。这是项目中的默认设置。
在一个新的build目录,内置:
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
,而不是在Cmake文件中设置的/MD
。
同样的事情发生,如果我尝试建立谷歌测试(1.7.0)
难道我只是不知道如何设置这些?或者有没有办法强制Visual Studio使用正确的标志,而无需手动打开Visual Studio并进行设置?
可能的重复[如何使GTest生成/ MDD(而不是/ MTD)默认情况下,使用CMake?](http://stackoverflow.com/questions/12540970/how-to-make-gtest-build- mdd-instead-of-mtd-by-default-using-cmake) – Tsyvarev
我认为其中一个解决方案(但不是所选的解决方案)实际上可以解决我的问题,但因为它不是所选的解决方案,所以我很犹豫“这解决了我的问题”按钮。我会尝试@sakra的解决方案(与http://stackoverflow.com/a/12546288/1861346匹配)。谢谢! – Matt