2017-09-14 2 views
1

Ich habe einen einfachen printf C-Code geschrieben und ein einfaches Makefile erstellt. Als ich mit CFLAGS, CPPFLAGS und LDFLAGS laufen zu lassen, geht die Werte der Variablen in eine cc Ausführung, ohne dass diese Werte durch eine gcc Ausführung gefolgt, wie folgt aus:CFLAGS CPPFLAGS und LDFLAGS rufen cc auf aber übergeben die Werte nicht an gcc

$ CFLAGS="-I." CPPFLAGS="-D TESTEDEFINE" CXXFLAGS="TESTECXXFLAGS" LDFLAGS="-L." LFLAGS="TESTELFLAGS" make 
cc -I. -D TESTEDEFINE -L. teste.c -o teste 
gcc -o teste teste.c 

Wenn ich laufe das eingebaute Programm, das define ist nicht definiert, da es mir den printf der nicht definierten #else gibt.

teste.c

#include <stdio.h> 

int main() 
{ 
#if defined(TESTEDEFINE) 
    printf("TESTEDEFINE!!!"); 
#else 
    printf("!!!"); 
#endif 
    return 0; 
} 

Makefile

all: teste 
    gcc -o teste teste.c 
+1

Wenn Sie sagen, dass 'gcc -o teste teste.c' ausgeführt werden soll, wird es ausgeführt. Wenn Sie diese Zeile entfernt haben, könnten die Makros funktionieren. Oder verwenden Sie '$ {CC} -o $ @ $ {CPPFLAGS} $ {CFLAGS} $ {LDFLAGS} $ {LDLIBS}' stattdessen als Rezeptzeile. –

+0

Also funktionieren die Flags nur, wenn ich sie explizit im Makefile verwende oder wenn ich den Befehl für die Regel weglasse? –

+0

könnte hilfreich sein, um Ihr Makefile in seiner Gesamtheit zu sehen ... oder ist das, was Sie gezeigt haben? Wenn ja, Sie haben keine Witze über "einfaches Makefile" – yano

Antwort

3

Die Variablen für Konsistenz, Lesbarkeit und Benutzerfreundlichkeit. Weder dein Compile noch dein Makefile verweisen auf sie. Der Compiler referenziert diese Variablen nicht automatisch.

Versuchen Sie stattdessen:

$ export CFLAGS="-I." CPPFLAGS="-D TESTEDEFINE" CXXFLAGS="TESTECXXFLAGS" LDFLAGS="-L." LFLAGS="TESTELFLAGS" 
$ gcc $CFLAGS $CPPFLAGS $CXXFLAGS $LDFLAGS $LFLAGS -o teste teste.c 

Sie müßten auch sie in Ihrer Make-Datei definieren und sie in der Compiler Linie verweisen.

+0

Das Ziel ist es, 'make', nicht GCC direkt von der Kommandozeile zu verwenden. –

Verwandte Themen