2016-03-28 32 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。然而,修改其他編譯選項(例如警告)是無條件完成的。