2017-12-15 5 views
0

ExternalProject_Addを使用して、外部makeベースのプロジェクトを構築しています。私は現在のビルド構成に従ってフラグを伝播したいと思います。CMakeは外部プロジェクトの特定の構成にフラグを使用します

私は基本的に以下のコマンドを持っている:

ExternalProject_Add(
     ... 
     BUILD_COMMAND make CFLAGS=${CMAKE_C_FLAGS_???} 
     ... 
     ) 

と私はプロジェクトがデバッグに建てられた、または現在の構成があるものは何でもしたときCMAKE_C_FLAGS_DEBUGを使用します。それはどうやってできますか?私はこれを試しましたが、解析しません:

ExternalProject_Add(
     ... 
     BUILD_COMMAND make CFLAGS=${CMAKE_C_FLAGS_$<CONFIG>} 
     ... 
     ) 
+0

あなたが使用している場合'CMAKE_BUILD_TYPE'変数を使って現在の設定名を取得することができます。マルチ設定のビルドツールの場合は、不運に思えます。ジェネレータ式は明示的に文書化されている場所でのみ動作します。 – Tsyvarev

+0

これは良いスタートですが、問題はそれが私に与えるものです。デバッグ、変数名にDEBUGが必要です。 –

+1

変数のサフィックスは、ビルドタイプの大文字のバージョンに過ぎません。この変換に 'string(TOUPPER)'を使用してください。 – Tsyvarev

答えて

0

私は適切な解決策を見つけられませんでしたが、合理的な妥協点。私たちにとって最も重要なことは、リリースビルドで正しいフラグを使用していたので、私は今、前に3.8にジェネレータ式でif-then-elseの欠如のためにthis rather convoluted workaroundを使用して、そのために特別にチェックしています:

set(default_flags "${CMAKE_C_FLAGS} -g -O2") 
set(release_flags "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}") 
set(flags $<$<CONFIG:Release>:${release_flags}>$<$<NOT:$<CONFIG:Release>>:${default_flags}>) 

ExternalProject_Add(
    ... 
    BUILD_COMMAND make CFLAGS=${flags} 
    ... 
    ) 
関連する問題