2016-05-04 10 views
1

私はcmakeでINTERFACE_SOURCESを使用する外部パッケージを使用しています。つまり、インポートしたライブラリをターゲットにリンクすると、インターフェイスのソースファイルがターゲットに自動的に追加されます。ターゲットをコンパイルすると、それらの外部ファイルもコンパイルされます。CMakeで外部のINTERFACE_SOURCESのコンパイルフラグを設定するには?

これは外部ファイルがコンパイル警告を引き起こすため、私にとっては問題を引き起こします。私は、外部ファイルをコンパイルするとき、警告レベルを低く設定して警告を取り除きたい。しかし、私はこれを行う方法を知らない。

これは私が今までに得たものです。

# reduce the warning level for some files over which we have no control. 
macro(remove_warning_flags_for_some_external_files myTarget) 

    # blacklist of files that throw warnings 
    set(blackListedExternalFiles 
     static_qt_plugins.cpp 
    ) 

    get_target_property(linkedLibraries ${myTarget} LINK_LIBRARIES) 

    foreach(library ${linkedLibraries}) 

     get_property(sources TARGET ${library} PROPERTY INTERFACE_SOURCES) 

     foreach(source ${sources}) 

      get_filename_component(shortName ${source} NAME) 

      if(${shortName} IN_LIST blackListedExternalFiles) 

       # everything works until here 
       # does not work 
       get_source_file_property(flags1 ${source} COMPILE_FLAGS)  
       # does not work 
       get_property(flags2 SOURCE ${source} PROPERTY COMPILE_FLAGS) 

       # exchange flags in list, this I can do 

       # set flags to source file, do not know how to 

      endif() 

     endforeach() 
    endforeach() 
endmacro() 

これは、これは

  • すべてのリンクされたライブラリを通過し、外部INTERFACE_SOURCESソースファイルを入手し何をすべきかです。
  • 外部ソースファイルがブラックリストに表示されているかどうかを確認します。その場合は、コンパイルフラグを下位レベルに変更します。

問題は、これらのINTERFACE_SOURCESのコンパイルフラグを取得して設定することです。 get_source_file_property()およびget_property()呼び出しは何も返しません。

ターゲットには属していないようですが、同時にコンパイルされたこれらのファイルのフラグを取得および設定するにはどうすればよいですか?

答えて

1

get_source_file_property()とGET_PROPERTY()呼び出しは、ソースファイルの

COMPILE_FLAGSプロパティは、 "ターゲット" で変更target_compile_optionsのようにコマンドをされていない何も返しません。最終的なフラグセットは、グローバル+ターゲット固有+ソース固有の組み合わせです。私が理解する限り、グローバルフラグまたはターゲットフラグの「継承」をオフにする方法はありません。ちょうどあなたの情報について

get_source_file_property(flags "${external_source}" COMPILE_FLAGS) 
if(NOT flags) 
    set(flags "") # convert "NOTFOUND" to "" if needed 
endif() 
set_source_files_properties(
    "${external_source}" 
    PROPERTIES 
    COMPILE_FLAGS "-w ${flags}" 
) 

How to set warning level in CMake?あなたが-wオプションを追加することで警告を無効にすることができます回避策として

記録のため:元々issue #408から。

+0

ありがとうございました。だから、ファイルにフラグがないように見えました。私はそれが間違いだと思った。単にフラグを設定するだけで動作します。 – Knitschi

関連する問題