CMake - ako zistiť typ compilera?

CMake - ako zistiť typ compilera?
« kdy: 18. 09. 2021, 20:48:35 »
Ahojte, zapol som si farby vo výstupe z buildovania / linkovania, keďže ten štandartný výpis bez farieb je trošku neprehľadný a trvá mi chvíľku, kým sa v tom zorientujem (totiž kompilovanie pre vačšinu compilerov spúšťam priamo cez konzolu). Pre GCC som to zapol takto:

Kód: [Vybrat]
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color")

Lenže compilerov mám niekolko (Clang a GCC v linuxe) a (vo Windowse mám dokonca 2 CLangy, 3x GCC a k tomu niekoľko verzií MSVC a ešte nvidiácky NVCC). A potreboval by som ten farebný výpis zapnúť podľa použitého compilera, správnym parametrom. Ide mi len o CLANG a GCC, (MSVC nepotrebujem nakoľko ho nekompilujem cez konzolu, a vo Visualku je ten zoznam chýb, celkom prehľadný. A NVCC je len na Cuda. Takže v hre sú len GCC a CLANG. Lenže CLang používa trochu iný parameter, ako GCC... Tak som to riešil if-om:

Kód: [Vybrat]
if (CMAKE_GENERATOR STREQUAL "Ninja")
  if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics")
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics")
  endif ()
  if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color")
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color")
  endif ()
endif ()

Akurát CMAKE_CXX_COMPILER_ID obsahuje prázdny string. Myslím, že je to preto, že enviroment variables CC a CXX nemám v systéme zadefinované. Mám to takto schválne, kôli tomu, že mám v systéme veľa compilerov a keby som tie variables vyplnil musel by som to neustále prepisovať. Takto mi to deteguje automaticky podľa toho či použijem ninja, make, alebo generujem solutiony pre visualko a keď chcem iný compiler ako defaultný, tak ho zadám ako konzolový parameter. Existuje ešte nejaký spôsob ako v CMAKE zistiť verziu compilera, aj bez toho aby som mal vyplnené CC a CXX variables? Skúšal som aj "boolovské" CMAKE_COMPILER_IS_GNUCXX, ale tiež som tam nemal hodnotu.
« Poslední změna: 19. 09. 2021, 21:26:00 od Petr Krčmář »


Re:ĆMake - ako zistiť typ compilera?
« Odpověď #1 kdy: 18. 09. 2021, 21:06:11 »
A co tak tie env premenne docasne nastavit na potrebne hodnoty, napr cez:
https://cmake.org/cmake/help/v3.7/variable/ENV.html
A po kompilacii (uspesnej ci neuspesnej tam treba mat krok na upratanie) ich nastavit naspat na prazdne

Re:ĆMake - ako zistiť typ compilera?
« Odpověď #2 kdy: 18. 09. 2021, 21:13:16 »
Otestuj si primo ten flag, ktery potrebujes: https://cmake.org/cmake/help/latest/module/CheckCXXCompilerFlag.html

Jeste existuje CMAKE_CXX_SIMULATE_ID, mozna ti pomuze...

Ja jsem ninju treba prestal pouzivat, prijde mi ze s make se cmake integruje lip - jsou i barvy, i absolutni cesty ve vystupu...