【问题标题】:variable target in a makefile生成文件中的变量目标
【发布时间】:2011-06-30 23:22:53
【问题描述】:

我正在尝试编译一组目标。然而,它似乎只做第一个。下面是显示错误的我的 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

我的问题,是否可以像 (%: %) 模式那样对变量进行扩展?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    试试这个:

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

    问题是

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

    【讨论】:

    • 不带参数运行make 仍然只执行第一个目标(abc)。
    • @Gingi:这是你得到的结果吗?您使用的是哪个版本的 Make?
    • @Beta GNU Make 3.81,Mac OS X 10.8.4
    • @Nebula:静态模式规则描述为here。该规则不假设 Make 知道等效的 .c 文件是什么,它更通用。它说:对于此列表中的任何目标 ($(OBJECTS)),获取整个目标名称 (%),并添加“.c” (%.c) 以获得先决条件。
    • @KellyBeard:没问题,$(ZIPS):%.zip:%
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多