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

时间:2017-09-14 14:08:35

标签: c gcc makefile cflags ldflags

我写了一个简单的printf C代码并制作了一个简单的makefile。 当我使用CFLAGS,CPPFLAGS和LDFLAGS运行make时,变量的值进入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

当我运行构建的程序时,定义没有定义,因为它给了我未定义的#else的printf。

teste.c

#include <stdio.h>

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

生成文件

all: teste
  gcc -o teste teste.c

1 个答案:

答案 0 :(得分: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中定义它们并在编译器行中引用它们。