有許多關於如何在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