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
答
的变量是一致性,可读性和易用性。你的编译和你的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。 –
如果您告诉它运行'gcc -o teste teste.c',那就运行它。如果您删除了该行,您可能会发现这些宏是可用的。或者使用'$ {CC} -o $ @ $ {CPPFLAGS} $ {CFLAGS} $ {LDFLAGS} $ {LDLIBS}'作为配方行。 –
因此,如果我在Makefile中明确地使用它们,或者如果我省略了规则的命令,这些标志才有效? –
可能有助于完整地查看您的makefile文件......或者您已经看到了什么?如果是这样,你不是在开玩笑“简单的makefile” – yano