2013-01-03 54 views
5

Visual Studio的vcproj文件包含影響構建的各種設置或屬性。例如,少數那些我想要一個項目,以轉換爲CMake的用途是如何使用cmake在vcproj文件中設置屬性?

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

當然也有很多人可能被設定的。問題是如何使用cmake生成項目時設置它們。有沒有人有任何想法如何設置這些屬性時,使用cmake而不是在事後編輯vcproj文件?我無法找到任何解釋如何通過cmake設置這些屬性的東西。我唯一知道如何設置的是那些cmake專門爲跨平臺的東西設置的(例如PreprocessorDefinitionsAdditionalIncludeDirectories)。但我需要能夠設置特定於Visual Studio的。

+0

據我所知,所有這些屬性都轉換爲編譯器(鏈接器)的相應命令行參數,因此您可以通過add_definition或set_target_properties – Alexey

回答

7

對於你所列出的標誌,你會添加以下到您的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() 

可以組這些在一個電話,如果你想:

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

如果你只需要一個標誌添加到一個單一的目標(比如,MyTestExe),你可以這樣做:

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

選項通過此設置焦油特定於獲取方法將覆蓋一般CMAKE_CXX_FLAGS變量中的任何衝突的方法。

有關這些命令的詳細信息辦:

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

在Visual Studio編譯器選項列出here

+0

添加這些參數。看起來您也可以通過'add_definitions'設置編譯器標誌。 –

+0

是的 - 通常有不止一種用CMake做事的方法。 Kitware的員工在維護向後兼容性方面非常重要,所以如果你發現一種可行的技術,它很可能會繼續工作。我認爲'add_definitions'最初設計用於設置預處理器定義,但在某些時候它的功能已經擴展。 – Fraser

+0

@Fraser這似乎不適用於GenerateXMLDocumentationFiles =「true」或/ doc標誌。只需設置標誌不會生成XML文件 - 它似乎依賴於.vcproj文件中的設置。有關如何使用CMake激活此任何提示? – Kohanz

1

每個屬性都對應於編譯器的命令行選項(cl)。您可以在CMakeList中設置這些命令行選項(使用像CMAKE_CXX_FLAGS這樣的變量,add_definitions()之類的命令以及COMPILE_FLAGS之類的屬性),並且CMake會在生成它們時自動將它們轉換爲.vc [x] proj文件中的設置。那些不明白的只是添加爲「附加命令行選項」。

相關問題