GNU Makefile: variablen export



  • Hi,

    ich will in einem Makefile eine Variable setzen und die im .c File im include Pfad nutzen... das funktioniert leider aber nicht und mir ist völlig unklar wieso.

    Makefile

    config:
       @export CONFIG=test1
       make all
    
    all:
       gcc foo.c -o foo
    

    foo.c

    #include "$(CONFIG)/foo.h"
    

    Der Compiler findet nie "$(CONFIG)/foo.h". Ich muß per Hand #include "test1/foo.h" angeben... dann kompiliert er. Was läuft da falsch? Ich suche mir einen Wolf aber finde den Fehler nicht.. 😞


  • Mod

    Wieso setzt du nicht einfach den Includepfad?

    Umgebungsvariablen im Code zu ersetzen: Da bist du total auf dem Holzweg. Darf ich fragen, wo du die Idee her hast?



  • Ich hab es noch nie versucht... ich war der Ansicht das geht.

    Das Beispiel ist ein bißchen vereinfacht. In Wirklichkeit wie bei make all ne große Cross Compiler Kette aus anderen Makefiles angeworfen und die scheint sich für C_INCLUDE_PATH & Co. nicht zu interessieren oder überschreibt sie an anderer Stelle wieder. Auf jeden Fall möchte ich den Teil möglichst wenig anfassen.


  • Mod

    Wenn all die Standardwege nicht funktionieren, dann musst du wohl in die Makefiles rein und rausfinden, warum diese nicht funktionieren.



  • Füg einfache -Ipfad zu den CFLAGS hinzu.

    Aber warum dein erster Versuch nicht geht: Bei Make werden die Zeilen in jeweils neuen Shellprozessen ausgeführt. Außerdem solltest du make nicht direkt aufrufen, sondern lieber $(MAKE) nehmen

    .PHONY: config all
    
    config:
      CFLAGS=-Ipfad $(MAKE) all
    
    all: foo # <- implizite Regel nutzen, dann werden die CFLAGS auch richtig berücksichtigt
    

    Wobei ich autotools oder CMake empfehlen würde, anstelle die Makefile per Hand zu schreiben.


Log in to reply