Visual Studio似乎忽略了cmake中设置的运行时库

时间:2016-03-28 15:26:48

标签: visual-studio cmake

有很多关于如何从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变量似乎都是正确的

cmake-gui showing all flags have /MD

然而,当我去构建时,无论是通过命令行(我习惯于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,并在任何目标中,例如gtestProperties - > Configuration Properties - > C/C++ - > Code GenerationRuntime Library设置为/MT,而不是{CALke文件中设置的/MD

如果我尝试构建google-test(1.7.0)

,也会发生同样的事情

我只是不明白如何设置这些?或者有没有办法强制Visual Studio使用正确的标志而无需手动打开Visual Studio并进行设置?

1 个答案:

答案 0 :(得分:1)

google-testgoogle-mock的CMake构建系统表现不佳。它们不遵循用户设置的编译选项和运行时选项,并且有理由覆盖那些他们认为合理用于测试目的的选项。

要阻止用MD替换MT,您可以在CMake缓存中将选项gtest_force_shared_crt设置为ON。但是,无条件地修改其他编译选项(例如警告)。