我的代码使用了一个我在构建过程中定义的宏,如下所示。
gcc -D VAR=1000 main.c -0 main
但我想创建两个可执行文件,一个用VAR = 1000,另一个用VAR = 2000。让我们说可执行文件名是main_1000和main_2000。
如何使用Makefile执行此操作。
我尝试这样做的方法如下。但它不起作用并给我一个错误。
gcc -g -c -o main.o main.c
main.c: In function ‘main’:
main.c:5:16: error: ‘VAR’ undeclared (first use in this function)
main.c:5:16: note: each undeclared identifier is reported only once for each function it appears in
make: *** [main.o] Error 1
生成文件:
CC=gcc
CFLAGS=-g
all: main_1000 main_2000
main_1000: main.o
$(CC) -D VAR=1000 -o main_1000 main.o $(CFLAGS)
main_2000: main.o
$(CC) -D VAR=2000 -o main_2000 main.o $(CFLAGS)
答案 0 :(得分:2)
main_1000: main.o
这意味着您已经期望main.o
出现在那里。由于没有将c
文件编译为o
文件的规则,make
使用其隐式规则,该规则不包括定义。你想要的是这个:
CC=gcc
CFLAGS=-g
all: main_1000 main_2000
main_1000: main.c
$(CC) -D VAR=1000 -o $@ $^ $(CFLAGS)
main_2000: main.c
$(CC) -D VAR=2000 -o $@ $^ $(CFLAGS)