Ich arbeite gerade an der Verwendung von cmake, um einige Projekte zu erstellen, mit den Hauptplattformen Visual C++, MinGW GCC und Linux GCC. Beim Erstellen mit GCC muss ich die Compileroption -Wno-invalid-offsetof
angeben.Wie man verschiedene Compiler-Optionen für verschiedene Compiler in cmake anwenden?
Meine aktuelle Lösung ist wie folgt ...
if ( "${CMAKE_GENERATOR}" MATCHES "^Visual Studio"
OR "${CMAKE_GENERATOR}" MATCHES "^NMake"
)
set (CPPLIB_COMPILER_OPTS "")
else()
set (CPPLIB_COMPILER_OPTS "-Wno-invalid-offsetof")
endif()
...
set_target_properties(sh_core PROPERTIES COMPILE_FLAGS "${CPPLIB_COMPILER_OPTS}")
# repeated for all targets
Dies funktioniert, aber unter der Annahme, dass alle Generatoren außer den Visual Studio diejenigen mit gcc bauen ist offensichtlich unsicher. Zum einen gibt es IIRC-Generatoren für Borland-Compiler. Noch wichtiger ist, dass die Verwendung von make nicht immer die Verwendung von gcc bedeutet.
Andere Compiler, die ich verwenden werde, sind llvm-gcc und clang. Glücklicherweise, glaube ich, unterstützt sogar clang gcc-kompatible Optionen. Aber diese Logik ist nur so lange gut, solange der relevante Code niemals freigegeben wird.
Cmake scheint nach verfügbaren Compilern zu suchen und ein Makefile speziell für diesen Compiler zu generieren (wirft die Frage auf - warum nicht zumindest die Möglichkeit haben, das Projekt direkt zu erstellen, ohne die Notwendigkeit eines Mittelsmanns wie make?).
Das war der Fall, ich hatte gehofft, in meinen CMakeLists.txt-Dateien direkt für gcc testen zu können. Bisher kann ich jedoch keine geeignete Variable zum Testen oder irgendeine andere offensichtliche Lösung finden.
Ist das möglich?
Das ist perfekt! Eine irrelevante Sache, aber ... es gibt nicht viel Sinn, diese Option für C zu überprüfen, da es in C keinen ungültigen Offset gibt - das passiert nur in C++. – Steve314
Das wusste ich nicht. In der Tat wusste ich nicht, was die Option war, aber es macht Sinn, da C nur POD-Typen hat http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Warning-Options.html. Und CMake ignoriert die Compiler-Warnung während des Tests - "wenn es kompiliert, funktioniert es". – richq
Gibt es eine Möglichkeit, nach Kombinationen von Optionen zu suchen? Außerdem wollte ich keine Kompilierungswarnungen sicherstellen und suchte nach einer Möglichkeit, Warnungen zu untersuchen. – thoni56