2016-03-28 68 views
0

有许多关于如何在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的变量似乎正确

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,并在任意目标中说gtest,PropertiesConfiguration PropertiesC/C++->Code Generation,Runtime Library设置为/MT,而不是在Cmake文件中设置的/MD

同样的事情发生,如果我尝试建立谷歌测试(1.7.0)

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

+1

可能的重复[如何使GTest生成/ MDD(而不是/ MTD)默认情况下,使用CMake?](http://stackoverflow.com/questions/12540970/how-to-make-gtest-build- mdd-instead-of-mtd-by-default-using-cmake) – Tsyvarev

+0

我认为其中一个解决方案(但不是所选的解决方案)实际上可以解决我的问题,但因为它不是所选的解决方案,所以我很犹豫“这解决了我的问题”按钮。我会尝试@sakra的解决方案(与http://stackoverflow.com/a/12546288/1861346匹配)。谢谢! – Matt

回答

1

google-testgoogle-mock的CMake构建系统表现不佳。他们不服从用户设置的编译选项和运行时选项,出于良好的理由,并且覆盖那些他们认为合理的选项来进行测试。

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