【问题标题】:Make all files matching a pattern with a single target使所有文件与单个目标的模式匹配
【发布时间】:2013-03-29 15:22:03
【问题描述】:

我有多个源文件(我们称它们为 file1.c、file2.c 等),我想将它们编译成单独的可执行文件。 makefile 的相关部分:

file%.x: file%.o
    $(CC) $(CFLAGS) $< -o $@
file%.o: file%.c
    $(CC) $(CFLAGS) -c $< -o $@

我可以使用make file1.xmake file2.x 等单独制作它们。我想在生成所有文件的makefile 中有一个目标。我尝试了一些方法,但没有奏效:

all: file*.x

all: file%.x

有没有简单的方法来做到这一点?提前致谢。

【问题讨论】:

    标签: gcc makefile


    【解决方案1】:
    SOURCES := $(wildcard file*.c)
    FILES := $(SOURCES:.c=.x)
    
    all: $(FILES)
    

    【讨论】:

      【解决方案2】:

      这里奇怪的是你只是在构建一堆 OBJECT 文件。通常,目标文件会依次用于链接在一起以形成可执行文件,因此您的默认规则是构建该可执行文件,这将构建它的任何依赖项。

      如果你真的只是想按照自己的方式做,我会这样做:

      FILES=test1 test2 test3
      
      all: $(FILES:%=%.o)
      
      $(FILES:%.o): %.c
        $(CC) -o $@ $^
      

      【讨论】:

        【解决方案3】:

        我实际上回答了我自己的问题(在this question 的答案的帮助下)。标记为“正确”的答案也有效。

        all: $(addsuffix .x, $(basename $(wildcard file*.c))
        

        感谢您的帮助。

        【讨论】:

          猜你喜欢
          • 2020-07-12
          • 2017-03-18
          • 1970-01-01
          • 1970-01-01
          • 2021-11-24
          • 2012-09-19
          • 1970-01-01
          • 2015-12-03
          • 2017-04-24
          相关资源
          最近更新 更多