gnu生成文件中的变量目标



我正在尝试编译一组目标。然而,它似乎只做了第一个。下面是我的makefile的一个剪辑,显示了错误。

  OBJECTS = abc def ghi
  SOURCES = abc.c def.c ghi.c
  $(OBJECTS):     $(SOURCES)
          @echo target is $@, source is $<

壳内,

  $ touch abc.c def.c ghi.c
  $ make

当我运行make时,我得到以下输出:

  target is abc, source is abc.c

因此,它似乎只是在运行第一个目标。

如果我替换$<对于$^,输出为:

  target is abc, source is abc.c def.c ghi.c

我的问题是,是否可以像(%:%(模式那样对变量执行展开

试试这个:

  OBJECTS = abc def ghi
  all: $(OBJECTS)
  $(OBJECTS):%:%.c
          @echo target is $@, source is $<

问题是

  1. 默认目标(如果您只键入"Make",Make会选择该目标(是makefile中的第一个目标,即"abc"。
  2. 您使所有源成为每个对象的先决条件。也就是说,这三个来源都是"abc"的先决条件。它们也是"def"one_answers"ghi"的先决条件。

最新更新