[cmake] Bash-Script aufrufen und Ergebnis verwenden

feydeur

Grünschnabel
Hi!

Ich stehe aktuell vor einem Problem: Arch Linux hat eine etwas seltsame Herangehensweise was die offiziellen Repo-SDL2-cmake-infos angeht. Also muss ich meine CMakeLists entsprechend anpassen. Aktuell habe ich das so gelöst:

Code:
option(ARCHLINUX "Check if running on arch linux" OFF)
IF(ARCHLINUX)
    target_link_libraries(${PROJECT_NAME} SDL2::SDL2)
ELSE ()
    target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
ENDIF ()

Das ganze baue ich dann mit cmake -DARCHLINUX=ON ../ unter Arch. Allerdings ist die Lösung etwas unschön, also habe ich mir ein Bash-Script geschrieben, welches ermittelt, ob Arch läuft. Die Frage ist nur: Was muss in meine CMakeLists.txt, damit das Script aufgerufen und der Rückgabewert verwendet wird?

Viele Grüße
feider

PS: Ich habe mit der SuFu rausgefunden, dass cmake-Fragen normalerweise in diesem Unterforum gestellt werden. Zudem geht es um ein C-Projekt, deshalb ist das hier hoffentlich in Ordnung.
 
Lösung
Hallo,
ich habe hier einmal folgendes Beispiel, welches ich verwende um den aktuellen Git Branch und Hash zu ermitteln. Du kannst das sicherlich so umbauen, dass dein Skript aufgerufen wird und der Output in eine Variable gespeichert wird.

Was genau findest du denn an deiner Lösung unschön? Es wird ja recht häufig bei CMake durch Konfigurationsparameter variabler Inhalt gesetzt. Ich persönlich finde es fast unschöner externe Skripte aufrufen zu müssen. Diese sind z.B. im Gegensatz zu CMake auch nicht plattformunabhängig. Aber das ist an dieser Stelle nur meine Einschätzung.


Bash:
# Get the current working branch
execute_process(
  COMMAND git rev-parse --abbrev-ref HEAD
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  OUTPUT_VARIABLE...
Hallo,
ich habe hier einmal folgendes Beispiel, welches ich verwende um den aktuellen Git Branch und Hash zu ermitteln. Du kannst das sicherlich so umbauen, dass dein Skript aufgerufen wird und der Output in eine Variable gespeichert wird.

Was genau findest du denn an deiner Lösung unschön? Es wird ja recht häufig bei CMake durch Konfigurationsparameter variabler Inhalt gesetzt. Ich persönlich finde es fast unschöner externe Skripte aufrufen zu müssen. Diese sind z.B. im Gegensatz zu CMake auch nicht plattformunabhängig. Aber das ist an dieser Stelle nur meine Einschätzung.


Bash:
# Get the current working branch
execute_process(
  COMMAND git rev-parse --abbrev-ref HEAD
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  OUTPUT_VARIABLE GIT_BRANCH
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Get the latest abbreviated commit hash of the working branch
execute_process(
  COMMAND git log -1 --format=%h
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  OUTPUT_VARIABLE GIT_COMMIT_HASH
  OUTPUT_STRIP_TRAILING_WHITESPACE
)
 
Lösung
Dankeschön!

Nun, mittels
Code:
if(UNIX)
    # mein bash-script aufrufen, dass die Variable ARCH setzt
    if(ARCH)
        # meine Arch-Befehle
    else()
        # normale Unix-Befehle
    endif()
endif()
if(WIN32)
    # Hier läufts sowieso anders!
endif()
kann ich das dann schön ausführen.

Ich verstehe dein Argument, aber ich möchte mir die Konfigurationsparameter für Dinge aufheben, die ich wirklich aktiv konfigurieren möchte. Bei Arch will ich ja nur umgehen, dass er diesen Fehler macht.

Viele Grüße
feider
 
Zurück