CFLAGS CPPFLAGS和LDFLAGS调用cc,但不会将值传递给gcc

问题描述:

我写了一个简单的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

的变量是一致性,可读性和易用性。你的编译和你的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。 –