19

現在、gcc プロジェクトを Visual C++ に移植しています。これは CMake ファイルで定義されており、互換性を保つために Visual C++ プロパティ シートを作成しました (GccCompat.props)。Visual C++ プロジェクト ファイルが CMake によって再生成されるたびに、プロパティ シートを手動で追加する必要があります。プロパティ シートを自動的に追加する方法がわからないからです。したがって、質問は次のとおりです。

生成された Visual C++ ソリューションにプロパティ シートを追加するように CMake に指示するにはどうすればよいですか?

4

3 に答える 3

9

この機能は、CMake のナイトリー ビルド ( https://gitlab.kitware.com/cmake/cmake/commit/e390991846825799e619e072a28f1da58b7c89ba ) に含まれていますが、まだ安定したリリースにはなっていません。理論的には次のリリースで、CMake のリリースは比較的頻繁に行われます。

VS_USER_PROPS使用するには、ターゲットにプロパティを設定します。例えば。set_target_properties(foo PROPERTIES VS_USER_PROPS "${props_file}").

ただし、このオプションで複数のプロパティ シートを使用できるようには見えず、既定のユーザー プロパティ ファイル ( $(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props) が置き換えられます。これを回避するには、プロパティ シートに他のプロパティ シートを含めることができるため、使用したい他のプロパティ シート (既定のユーザー プロパティ シートを含む) を含む「マスター」プロパティ シートを作成できます。

于 2017-01-26T20:39:02.613 に答える
3

この質問は少し古いですが、最近 GStreamer をプロジェクトに統合しているときに同じ問題に遭遇しました。GStreamer には、非常によく準備された高品質のプロパティ シートのセットが付属しており、CMake をいじる代わりにそれらを使用したいと考えました。

幸いなことに、この問題は Windows と Visual Studio のみに限定されています。だからここに私の解決策があります:

アイデアは、Visual Studio の .user ファイル機能を使用することです。CMake はこのファイルを生成しないため、構成時に生成しても安全です。構成時に、プロジェクト ファイルと同じ名前で末尾が .user 拡張子のファイルを生成する場合があります。

部分的な解決策:

プロジェクト ファイルの名前がmy_project.vcxprojの場合、その隣に という名前の別のファイルを作成する必要がありますmy_project.vcxproj.userMSDNによると

ユーザー ファイル (.vcxproj.user) には、デバッグや展開の設定など、ユーザー固有のプロパティが格納されます。vcxproj.user ファイルは、特定のユーザーのすべてのプロジェクトに適用されます。

プロパティ シートをインポートするためのこのファイルの内容は、次のようなものです。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="/path/to/sheet1.props" />
  <Import Project="/path/to/sheet2.props" />
</Project>

完全ではありませんが、CMake がプロパティ シートのサポートを開始するまでは機能します。このファイルはfile、構成時に CMake のコマンドを使用して作成できます。

潜在的な警告:

この方法でプロパティ シートを追加すると、[プロパティ マネージャー] ウィンドウに表示されないことがありますが (Visual Studio Community 2013 のバグである可能性があります)、常に適切にインポートされ、依存関係が正しく解決されます。

于 2015-10-10T20:26:35.140 に答える
0

必要なプロパティがわからない。この複数の構成の例のように、いくつかは CMake で直接設定できます。

set (CMAKE_CONFIGURATION_TYPES "A;B;C;D" CACHE STRING "Configurations" FORCE)

foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )

    set (CMAKE_CXX_FLAGS_${OUTPUTCONFIG}                "/ZI /Od")
    set (CMAKE_EXE_LINKER_FLAGS_${OUTPUTCONFIG}         "/debug")

endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

ここにリストされている変数を除いて、CMake にはプロパティ シートを添付する可能性はないと思います。

于 2013-03-12T13:55:14.890 に答える