有时我们不想反复的修改程序,而希望通过 Makefile 传参数来编译程序不同的模块。
如下面的例子:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=9;
#ifdef DEBUG
i=1;
#else
i=0;
#endif
printf("i=%d\n", i);
return 0;
}
当我们处于 debug 模式的时候 i = 1;当我们处于 release 模式的时候 i = 0;
我们的Makefile可以这样写:
CFLAGS+=-g -Wall ${FLAGS}
ifeq ($(FLAGS),-DDEBUG)
RE += ${FLAGS}
endif
all: a
@echo ${RE}
clean:
rm *.o a -f
当我们选择 release 模式编译的时候,我们直接执行 make
cc -g -Wall a.c -o a
./a
i=0
而当我们选择 debug 模式编译的时候,我们执行 make FLAGS+=-DDEBUG
cc -g -Wall -DDEBUG a.c -o a
-DDEBUG
./a
i=1