2017-09-14 83 views
1

我寫了一個簡單的printf C代碼並製作了一個簡單的makefile。 當我運行make與CFLAGS,CPPFLAGS和LDFLAGS,該變量的值進入一個CC中,接着是海灣合作委員會的執行沒有這些價值觀,就像這樣:CFLAGS CPPFLAGS和LDFLAGS調用cc,但不會將值傳遞給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 

當我運行內置程序中, define沒有定義,因爲它給了我未定義的#else的printf。

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

如果您告訴它運行'gcc -o teste teste.c',那就運行它。如果您刪除了該行,您可能會發現這些宏是可用的。或者使用'$ {CC} -o $ @ $ {CPPFLAGS} $ {CFLAGS} $ {LDFLAGS} $ {LDLIBS}'作爲配方行。 –

+0

因此,如果我在Makefile中明確地使用它們,或者如果我省略了規則的命令,這些標誌纔有效? –

+0

可能有助於完整地查看您的makefile文件......或者您已經看到了什麼?如果是這樣,你不是在開玩笑「簡單的makefile」 – yano

回答

3

的變量是一致性,可讀性和易用性。你的編譯和你的makefile都沒有引用它們。編譯器不會自動引用這些變量。

試試這個:

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

您還需要在Makefile中定義它們,並在編譯行中引用它們。

+0

目標是直接從命令行使用'make',而不是GCC。 –