2016-03-28 29 views
0

Visual StudioでランタイムライブラリをCMakeから設定する方法については多くの記事がありますが、私の場合はVisual Studioが自分の設定を無視しているようです。一見、Visual Studioはcmakeで設定されたランタイムライブラリを無視します

私は/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しかし

、私が構築するために行く、のいずれかのコマンドラインを介して(Iように見えます私は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 Generationの場合、Runtime Library/MTに設定され、Cmakeファイルでは/MDに設定されていません。

同じことは、私はGoogleのテスト(1.7.0)

を構築しようとした場合、私はちょうどこれらを設定する方法を理解しないでくださいどうなりますか?またはVisual Studioを手動で開き、設定せずにVisual Studioに正しいフラグを使用させる方法がありますか?

+1

[CMakeを使用してGTestビルド/ MDdを(デフォルトで/ MTdの代わりに)作成する方法](http://stackoverflow.com/questions/12540970/how-to-make-gtest-build- – Tsyvarev

+0

解決策の1つ(選択されたものではない)が実際に私の問題を解決すると思うが、それが選択されたものではないので、私は躊躇している「この解決済みの問題」ボタンをクリックします。 @sakraのソリューション(http://stackoverflow.com/a/12546288/1861346と一致します)を試してみましょう。ありがとう! – Matt

答えて

1

google-testgoogle-mockのCMakeビルドシステムは正常に動作しません。彼らは正当な理由でユーザーが設定したコンパイルオプションと実行時オプションに従わず、テスト目的のために妥当であると考えるオプションでそれらを上書きします。

MTMDに置き換えないようにするには、CMakeキャッシュ内でgtest_force_shared_crtONのオプションを設定します。しかし、他のコンパイルオプション(例えば、警告)の変更は無条件で行われる。

関連する問題