0

我有文件main.c,version1.cversion2.cheader.h

version1.cversion2.c是同一个头文件 ( header.h) 的两种不同实现,这个头文件被main.c.

现在,我想

$ make v1
cc -c main.c
cc -c version1.c
cc -o prog main.o version1.o

或者

$ make v2
cc -c main.c
cc -c version2.c
cc -o prog main.o version2.o

取决于我使用的代码版本。

我尝试有条件地附加到 Makefile 目标内的变量并写道

.PHONY: v1 v2
OBJ = main.o
v1: OBJ += version1.o
v2: OBJ += version2.o
v1 v2: prog
prog: $(OBJ)
     cc -o prog $(OBJ)
%.o: %.c header.h
     cc -c $<

但这根本行不通:

$ make v1
cc -c main.c
cc -o prog main.o version1.o
cc: version1.o: No such file or directory
make: *** [prog] Error 1

当它出现在依赖项列表中时,它似乎在附加之前进行评估,但是当make出现命令列表中时在它之后进行评估。$(OBJ)

这是一个错误make吗?还是我只是做错了?我该如何正确地做到这一点?

4

1 回答 1

1

变量 ( ) 的目标特定修改v1: OBJ += version1.o适用于规则主体,而不是先决条件列表。这是我的做法:

.PHONY: v1 v2
v1: version1.o
v2: version2.o
v1 v2: main.o
    cc -o prog $^

%.o: %.c header.h
    cc -c $<
于 2012-06-29T11:31:43.360 回答