我试图通过在项目列表中创建所有依赖项来“解雇”编译,这些项目本身就是目标。
从答案(最后,由卡尔发布......)中给出的似乎表明这样的事情是可能的。
Wildcard targets in a Makefile
all: $(OBJECTS)
OBJECTS = foo.o bar.o
bar.o: bar.c
@echo make $@
foo.o: foo.c
@echo make $@
.PHONY: all
我的问题是,当我运行make时,我得到以下内容,我似乎无法将其编译。
make: Nothing to be done for `all'.
答案 0 :(得分:3)
反转前两行的顺序,如下所示:
OBJECTS = foo.o bar.o
all: $(OBJECTS)
在您的示例中,当Make获得all
规则时,OBJECTS
尚未定义,因此它解析为:
all:
Make看到一条没有命令且没有先决条件的规则 - 没有什么可做的。
答案 1 :(得分:1)
您可以执行类似
的操作 %.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
这意味着:
要制作.o
文件,我们需要一个名称相同的.c
文件(由%
表示)。制作.o
文件的命令是C编译器$(CC)
的名称,后跟任何编译器标志$(CFLAGS)
,然后是-c
等。$<
是第一个先决条件的名称($^
是所有先决条件的名称,如果需要),$@
是目标的名称。