私は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()呼び出しは何も返しません。
ターゲットには属していないようですが、同時にコンパイルされたこれらのファイルのフラグを取得および設定するにはどうすればよいですか?
ありがとうございました。だから、ファイルにフラグがないように見えました。私はそれが間違いだと思った。単にフラグを設定するだけで動作します。 – Knitschi