运行Makefile目标

时间:2011-06-29 23:50:02

标签: makefile

我试图通过在项目列表中创建所有依赖项来“解雇”编译,这些项目本身就是目标。

从答案(最后,由卡尔发布......)中给出的似乎表明这样的事情是可能的。

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'.

2 个答案:

答案 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等。$<是第一个先决条件的名称($^是所有先决条件的名称,如果需要),$@是目标的名称。