2013-01-03 1 views
5

vcproj-Dateien für Visual Studio enthalten verschiedene Einstellungen oder Eigenschaften, die sich auf den Build auswirken. Zum Beispiel, einige von denen, die ein Projekt, das ich versuche, Anwendungen zu konvertieren zu cmake sindWie legen Sie Eigenschaften in einer vcproj-Datei mit cmake fest?

StringPooling="true" 
RuntimeLibrary="2" 
TreatWChar_tAsBuiltInType="true" 
WarningLevel="3" 
Detect64BitPortabilityProblems="false" 

Es gibt natürlich viele andere, die eingestellt werden können. Die Frage ist, wie man sie einstellt, wenn das Projekt mit cmake erzeugt wird. Hat jemand eine Idee, wie man diese Art von Eigenschaften bei der Verwendung von cmake anders als das Bearbeiten der vcproj-Datei nach der Tat? Ich kann nichts finden, das erklärt, wie diese Art von Eigenschaften über CMake eingestellt werden könnte. Die einzigen, die ich zu setzen weiß, sind diejenigen, für die cmake spezifisch plattformübergreifendes Zeug hat (z. B. PreprocessorDefinitions oder AdditionalIncludeDirectories). Aber ich muss in der Lage sein, diejenigen zu setzen, die spezifisch für Visual Studio sind.

+0

Soweit ich alle diese Eigenschaften zu Compiler (Linker) in entsprechenden Befehlszeilenparameter umgewandelt wissen, so können Sie diese Parameter hinzufügen über add_definition oder set_target_properties – Alexey

Antwort

7

Für die Flags, die Sie aufgelistet haben, würden Sie folgendes zu Ihrem CMakeLists.txt hinzufügen:

if(MSVC) 
    # StringPooling: true == /GF false == /GF- 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GF") 

    # RuntimeLibrary 
    # 0 (MultiThreaded) == /MT 
    # 1 (MultiThreadedDebug) == /MTd 
    # 2 (MultiThreadedDLL) == /MD 
    # 3 (MultiThreadedDebugDLL) == /MDd 
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD") 
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd") 

    # TreatWChar_tAsBuiltInType: true == /Zc:wchar_t false == /Zc:wchar_t- 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:wchar_t") 

    # WarningLevel: /W<level 0 to 4> or /Wall 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") 

    # Detect64BitPortabilityProblems: /Wp64 - Deprecated since VC++ 2010 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wp64") 
endif() 

Sie Gruppe kann in einem Aufruf diese, wenn Sie wollen:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GF /Zc:wchar_t /W3 /Wp64") 

Wenn Sie brauchen nur ein Flag auf ein einzelnes Ziel (sagen wir, MyTestExe) hinzufügen möchten, können Sie tun:

set_target_properties(MyTestExe PROPERTIES COMPILE_FLAGS "/GF- /W2") 

Optionen über diesen tar gesetzt get-spezifische Methode überschreibt alle in Konflikt stehenden Variablen in der allgemeinen CMAKE_CXX_FLAGS Variable.

Für weitere Informationen zu diesen Befehlen tun:

cmake --help-variable "CMAKE_<LANG>_FLAGS_DEBUG"
cmake --help-command set_target_properties
cmake --help-property COMPILE_FLAGS

Die Visual Studio Compiler-Optionen here aufgeführt sind.

+0

Es sieht aus wie Sie können auch die Compiler-Flags über 'add_definitions ' . –

+0

Ja - es gibt oft mehr als eine Art, Dinge mit CMake zu tun. Die Leute bei Kitware sind wirklich sehr darauf bedacht, Abwärtskompatibilität aufrechtzuerhalten. Wenn Sie also eine Technik finden, die funktioniert, wird sie wahrscheinlich weiter funktionieren. Ich denke, die 'add_definitions' wurden ursprünglich entworfen, um Präprozessordefinitionen zu definieren, aber irgendwann wurde ihre Funktionalität erweitert. – Fraser

+0

@Fraser Dies scheint nicht für das GenerateXMLDocumentationFiles = "True" oder/doc Flag zu funktionieren. Wenn Sie nur das Flag setzen, wird die XML-Datei nicht generiert. Sie scheint sich auf die Einstellung in der .vcproj-Datei zu verlassen. Irgendwelche Tipps, wie Sie dies mit CMake aktivieren können? – Kohanz

1

Jede dieser Eigenschaften entspricht einer Befehlszeilenoption des Compilers (cl). Sie setzen diese Befehlszeilenoptionen in Ihrer CMakeList (mit Variablen wie CMAKE_CXX_FLAGS, Befehle wie add_definitions() und Eigenschaften wie COMPILE_FLAGS) und CMake übersetzt sie automatisch in die Einstellungen in .vc [x] proj Dateien, wenn sie erzeugt werden. Diejenigen, die es nicht versteht, werden nur als "Zusätzliche Befehlszeilenoptionen" hinzugefügt.

Verwandte Themen