Obecnie pracuję nad wykorzystaniem cmake do budowania niektórych projektów, a głównymi platformami są Visual C++, MinGW GCC i Linux GCC. Podczas budowania z GCC, muszę określić opcję kompilatora -Wno-invalid-offsetof
.Jak zastosować różne opcje kompilatora dla różnych kompilatorów w cmake?
Mój obecny dylemat jest następujący ...
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
To działa, ale przy założeniu, że wszystkie generatory, inne niż te, które wizualnych studio zbuduje z gcc jest oczywiście niebezpieczne. Na początek są generatory IIRC dla kompilatorów Borlanda. Co ważniejsze, używanie make nie zawsze oznacza używanie gcc.
Inne kompilatory, których prawdopodobnie używam, to llvm-gcc i clang. Na szczęście myślę, że nawet clang obsługuje opcje kompatybilne z gcc. Ale ta logika jest dobra tylko tak długo, jak długo odpowiedni kod nigdy nie zostanie zwolniony.
Pojawi się Cmake, aby sprawdzić dostępne kompilatory i wygenerować plik Makefile specjalnie dla tego kompilatora (podnosząc pytanie - dlaczego nie ma co najmniej opcji bezpośredniego budowania projektu, bez potrzeby stosowania pośrednika takiego jak marka?).
W tym przypadku miałem nadzieję, że będę mógł testować bezpośrednio dla gcc w moich plikach CMakeLists.txt. Do tej pory jednak nie mogę znaleźć odpowiedniej zmiennej do przetestowania ani żadnego innego oczywistego rozwiązania.
Czy to możliwe?
To jest idealne! Jedną nieistotną rzeczą, choć ... nie ma sensu sprawdzanie tej opcji dla C, ponieważ nie ma czegoś takiego jak nieprawidłowa wartość przesunięcia w C - zdarza się to tylko w C++. – Steve314
Nie wiedziałem o tym. Właściwie nie wiedziałem, do czego służy ta opcja, ale ma to sens, ponieważ C ma tylko typy POD http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Warning-Options.html. A CMake ignoruje ostrzeżenie kompilatora podczas testu - "jeśli kompiluje działa". – richq
Czy istnieje sposób sprawdzenia kombinacji opcji? Poza tym chciałem się upewnić, że nie ma ostrzeżeń o kompilacji, więc szukałem sposobu na zbadanie ostrzeżeń. – thoni56