Ich habe eine neue Konfiguration DebugWithReleaseCRT
zu unseren CMake-Skripten hinzugefügt, die auf der Standardkonfiguration Debug
config basiert, aber mit Release CRT (/MD
statt /MDd
) verknüpft ist und _ITERATOR_DEBUG_LEVEL=0
definiert. I checked Projektdatei Einstellungen erzeugt und sieht alles gut aus:VS: Wie DebugWithReleaseCRT zu konfigurieren?
C/C++ -> Code Generation -> Runtime = Multi-Threaded-DLL (/ MD)
Allerdings, wenn ich es bauen bekomme ich Fehler wie:
3> 3rd-party.lib (3-party.obj): Fehler LNK2038: Nichtübereinstimmung erkannt für 'Runtime': Wert 'MD_DynamicRelease' Wert 'MDd_DynamicDebug' in My stimmt nicht überein. obj
, die ich lesen, wie:
Ihre
gebautMy.cpp
Datei mit Debug-CRT zusammengestellt (MDd_DynamicDebug
), während Sie versuchen, mit Bibliothek3rd-party.lib
zu verknüpfen, die mit Release-CRT (MD_DynamicRelease
)
Ich überprüfte auch diese bestimmte Datei (My.cpp
) Einstellungen, aber nichts Besonderes, es erbte /MD
Flag aus dem übergeordneten Projekt.
Warum ist mein Projekt mit Debug CRT trotz der angegebenen /MD
Flag verbunden?
Versuchen Sie, den Cache zu säubern, das Objekt speichert erneut eine Neuerstellung. Beachten Sie auch, dass "MD_DynamicRelease" nicht mit dem Wert "MDd_DynamicDebug" übereinstimmt, der anzeigt, dass Sie einen falschen [CMAKE_BUILD_TYPE] aufrufen oder verwenden (https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html) – Joel
@Joel: Es ist nicht Cache-Problem oder Neuerstellung, und 'CMAKE_BUILD_TYPE' ist in VS-Fall nicht relevant –
Ist es möglich, beide/MD und/MDd in der Befehlszeile verwendet werden? (Überprüfen Sie die "Befehlszeile" in den Projekteinstellungen). Vielleicht/MDd überschreibt/MD, und die IDE zeigt es nicht korrekt in den Projekteinstellungen an. – MuertoExcobito