6

Visual Studio の vcproj ファイルには、ビルドに影響するさまざまな設定またはプロパティが含まれています。たとえば、私がcmakeに変換しようとしているプロジェクトが使用するもののいくつかは

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

もちろん、設定できるものは他にもたくさんあります。問題は、プロジェクトがcmakeを使用して生成されたときにそれらを設定する方法です。事後にvcprojファイルを編集する以外に、cmakeを使用するときにこれらの種類のプロパティを設定する方法を知っている人はいますか? これらの種類のプロパティがcmakeを介してどのように設定されるかを説明するものは何も見つかりません。私が設定方法を知っているのは、cmake が特にクロスプラットフォームのものを持っているものだけです (例:PreprocessorDefinitionsまたはAdditionalIncludeDirectories)。しかし、Visual Studio に固有のものを設定できるようにする必要があります。

4

3 に答える 3

8

リストしたフラグについては、次を 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")

このターゲット固有のメソッドを介して設定されたオプションは、一般CMAKE_CXX_FLAGS変数内の競合するものをオーバーライドします。

これらのコマンドの詳細については、次を実行してください。

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

Visual Studio コンパイラ オプションは、ここに一覧表示されています。

于 2013-01-05T01:10:18.523 に答える
1

これらの各プロパティは、コンパイラのコマンドラインオプションに対応しています(cl)。これらのコマンドラインオプションをCMakeListで設定すると(のような変数、のようなCMAKE_CXX_FLAGSコマンド、のようなadd_definitions()プロパティを使用COMPILE_FLAGS)、CMakeはそれらを生成するときに.vc[x]projファイルの設定に自動的に変換します。理解できないものは、「追加のコマンドラインオプション」として追加されます。

于 2013-01-04T08:58:54.780 に答える