2013-01-03 15 views
5

Visual Studioのvcprojファイルには、ビルドに影響するさまざまな設定やプロパティが含まれています。例えば、私は、用途をCMakeのに変換しようとしているプロジェクトがどのようにしてvcprojファイルのプロパティをcmakeで設定しますか?

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

あるものの数を設定することができ、他のコースのたくさんのがあります。問題は、プロジェクトがcmakeを使用して生成されたときにそれらを設定する方法です。事実の後にvcprojファイルを編集する以外に、cmakeを使用するときに、どのようにこれらのプロパティーを設定するのか考えている人はいますか?私はこの種のプロパティがcmake経由でどのように設定されるかを説明するものは何も見つかりません。私が設定する方法を知っているのは、cmakeがクロスプラットフォームのものを持っているものだけです(例えば、PreprocessorDefinitionsまたはAdditionalIncludeDirectories)。しかし、私は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() 

することができますしたい場合は1回の呼び出しでグループこれら:

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

の場合あなただけが行うことができ、単一のターゲット(たとえば、MyTestExe)にフラグを追加する必要があります。このタールを介して設定された

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

オプションget-specificメソッドは、一般的な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ファイルの設定に自動的に変換します。理解できないものは、「追加のコマンドラインオプション」として追加されたばかりです。あなたがリストされてきたフラグの

関連する問題