Ich verwende ein externes Paket in cmake, das INTERFACE_SOURCES verwendet. Das bedeutet, wenn ich die importierte Bibliothek mit meinem Ziel verlinke, werden die Interface-Quelldateien automatisch zu meinem Ziel hinzugefügt. Wenn ich mein Ziel kompiliere, werden diese externen Dateien ebenfalls kompiliert.Wie setze ich Compile Flags für externe INTERFACE_SOURCES in CMake?
Das verursacht ein Problem für mich, da die externen Dateien kompilieren Warnungen verursachen. Ich möchte die Warnungen entfernen, indem ich beim Kompilieren der externen Dateien eine niedrigere Warnstufe festlege. Aber ich weiß nicht, wie ich das machen soll.
Das ist, was ich bis jetzt bekommen habe. Diese
# 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()
ist, was diese tun sollte
- durch alle verknüpften Bibliotheken gehen und die externen INTERFACE_SOURCES Quelldateien erhalten.
- Überprüfen Sie für jede externe Quelldatei, ob es in der schwarzen Liste erscheint. Wenn dies der Fall ist, ändern Sie die Kompilierungsflags auf eine niedrigere Ebene.
Das Problem, das ich habe, ist mit Abrufen und Festlegen der Kompilierflags für diese INTERFACE_SOURCES. Die Aufrufe get_source_file_property() und get_property() geben nichts zurück.
Wie kann ich die Flags für diese Dateien bekommen und setzen, die scheinbar nicht zu meinem Ziel gehören, aber gleichzeitig kompiliert werden?
Vielen Dank für Ihre Hilfe. Die Datei schien also keine Flaggen zu haben. Ich dachte, das wäre ein Fehler. Einfach die Flaggen zu setzen, funktionierte zwar. – Knitschi