2013-01-03 9 views
5

Pliki vcproj dla Visual Studio zawierają różne ustawienia lub właściwości, które mają wpływ na kompilację. Na przykład, niektóre z nich to projekt, który próbuję przekonwertować do cmake zastosowań sąJak ustawić właściwości w pliku vcproj za pomocą cmake?

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

Istnieje oczywiście wiele innych, które mogą być ustawione. Pytanie brzmi, jak je ustawić, gdy projekt jest generowany za pomocą cmake. Czy ktoś ma jakiś pomysł, jak ustawić tego rodzaju właściwości podczas korzystania z cmake innych niż edycji pliku vcproj po fakcie? Nie mogę znaleźć niczego, co wyjaśniałoby, jak te właściwości można ustawić za pomocą cmake. Jedyne, co umiem ustawić, to te, które cmake ma specjalnie dla różnych platform (np. PreprocessorDefinitions lub AdditionalIncludeDirectories). Ale potrzebuję móc ustawić te, które są specyficzne dla Visual Studio.

+0

O ile mi wiadomo, wszystkie te właściwości zostały przekształcone do odpowiednich parametrów wiersza polecenia do kompilatora (linker), dzięki czemu można dodać te parametry poprzez add_definition lub set_target_properties – Alexey

Odpowiedz

7

dla flagi już wymienionych, należy dodać następujące do CMakeLists.txt:

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() 

można grupować je w jednej rozmowy, jeśli chcesz:

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

Jeśli wystarczy dodać flagę do jednego celu (powiedzmy, MyTestExe), można zrobić:

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

Ustaw opcje za pośrednictwem tej smoły Metoda specyficzna dla get zastąpi wszelkie sprzeczne wartości w ogólnej zmiennej CMAKE_CXX_FLAGS.

W celu uzyskania dalszych informacji na temat tych poleceń zrobić:

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

Visual Studio opcje kompilatora są wymienione here.

+0

Wygląda na to, że można również ustawić flagi kompilatora za pomocą 'add_definitions' . –

+0

Tak, często jest więcej niż jeden sposób robienia rzeczy z CMake. Faceci z Kitware są naprawdę wielcy, jeśli chodzi o zachowanie kompatybilności wstecznej, więc jeśli znajdziesz technikę, która działa, prawdopodobnie nadal będzie działać. Myślę, że 'add_definitions' został pierwotnie zaprojektowany do użycia przy definiowaniu preprocesora, ale w pewnym momencie jego funkcjonalność została rozszerzona. – Fraser

+0

@Fraser Wydaje się, że to nie działa dla flagi GenerateXMLDocumentationFiles = "true" lub/doc. Po prostu ustawienie flagi nie generuje pliku XML - wygląda na to, że opiera się na ustawieniu w pliku .vcproj. Wszelkie wskazówki, jak aktywować to za pomocą CMake? – Kohanz

1

Każda z tych właściwości odpowiada opcji wiersza polecenia kompilatora (cl). Ustawiasz te opcje wiersza poleceń w CMakeList (używając zmiennych takich jak CMAKE_CXX_FLAGS, komendy takie jak add_definitions() i właściwości takie jak COMPILE_FLAGS), a CMake automatycznie tłumaczy je na ustawienia w plikach .vc [x] proj podczas ich generowania. Te, których nie rozumie, są po prostu dodawane jako "Dodatkowe opcje wiersza poleceń".

Powiązane problemy