2016-03-28 11 views
0

Visual Studio'da Çalışma Zamanı kitaplığını CMake'den ayarlama konusunda birçok yayın var, ancak benim durumumda Visual Studio ayarımı göz ardı ediyor gibi görünüyor.Visual Studio, cmake içinde çalışma zamanı kitaplığını görmezden geliyor gibi görünüyor.

/MD ile google-mock oluşturmak istiyorum. Bu, projedeki varsayılan ayardır. ile oluşturulmuş bir taze inşa dizinde

:

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 

Bütün cmake değişkenleri doğru

cmake-gui showing all flags have /MD Ancak

, ben inşa erişmek için, ya komut satırı aracılığıyla (I görünüyor 'linux ..' ya da Visual Studio'dan kullanılır, /MT bayrağını kullanır.

My inşa komutu (32 bit hedefleyen):

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" 
msbuild /m:4 /property:Configuration=%build_type% ALL_BUILD.vcxproj 

Çıktı:

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" 

(. Orada /MT saklanarak dikkat edin)

Visual Studio, ben çözüm açın Release serbest bırakma tipini seçin ve hedeflerin herhangi birinde gtest, Properties ->Configuration Properties ->C/C++ ->Code Generation, Runtime Library, Cmake dosyasında ayarlandığı gibi /MD değil, /MT olarak ayarlanmıştır. Google-testi (1.7.0)

Sadece bunları nasıl ayarlanacağını Dont'anlamak inşa etmeye çalışırsanız

Aynı şey olur? Veya Visual Studio'nun Visual Studio'yu el ile açmadan ve ayarlamadan doğru bayrağı kullanmaya zorlamak için bir yolu var mı?

+1

Muhtemel yinelenen [CMake kullanarak varsayılan olarak GTest build/MDd (/ MTd yerine) nasıl oluşturulur?] (Http://stackoverflow.com/questions/12540970/how-to-make-gtest-build- mdd-yerine-of-mtd-by-varsayılan-kullanarak-cmake) – Tsyvarev

+0

Bence çözümlerden biri (ama seçilmiş olanı değil) aslında benim problemimi çözecek, ama seçilmiş olanı seçmediğim için, baskı yapmakta tereddüt ediyorum. "Bu Benim Sorunumu Çözdü" düğmesine basın. @sakra'nın çözümünü (http://stackoverflow.com/a/12546288/1861346 ile eşleşen) deneyeceğim. Teşekkürler! – Matt

cevap

1

Hem google-test hem de google-mock numaralı CMake yapı sistemleri iyi davranmamıştır. Kullanıcı tarafından iyi bir sebepten dolayı oluşturulan derleme seçenekleri ve çalışma zamanı seçeneğine uymazlar ve test amacıyla makul gördükleri seçenekleri geçersiz kılarlar.

Eğer CKağıt önbelleğinde ON seçeneği gtest_force_shared_crt ayarlayabilirsiniz MT ile MD değiştirilmesini önlemek için. Diğer derleme seçeneklerinin (ör. Uyarılar) modifikasyonu ise koşulsuz olarak yapılır.

İlgili konular