【问题标题】:Makefile generic rule to build src files from multiple folders从多个文件夹构建 src 文件的 Makefile 通用规则
【发布时间】:2017-12-04 16:45:04
【问题描述】:

我打算保留我所有的 *.o 文件 build/obj 并拥有源文件 src/src.c log/log.c

OBJECTS=build/log.o build/src.o

$(OBJ_DIR)/%.o : src/%.c log/%.c
       $(CC) $(CFLAGS) $(DEFINE) $(INCLUDE) -o$@ $<

但它没有将 *.o 映射到正确的 *.c 我做错了什么?

【问题讨论】:

  • $(OBJDIR)/%.o : src/%.c ,当有一个文件夹时有效。但我想从多个文件夹映射到 c 文件
  • 您可以使用VPATH 执行此操作。 (见here)。我不是VPATH 的忠实粉丝,因为它让我们更难弄清楚makefile 在做什么,但它可以满足您的需求。
  • 我试过 VPATH, VPATH = src:log ,它对我不起作用,第一个文件构建下一个没有。添加 VPATH 时,我将先决条件修改为 %.c
  • 我想再添加一件事,这有效(它将.o正确映射到.c)"$(addprefix $(SRC_DIR)/,%.c)" 当只有一个src文件夹和多个c文件在源文件夹中
  • 嗯。您必须使用 vpath 发布您的 makefile。我刚试过,它对我有用。我会在答案中发布我的...

标签: makefile gnu-make


【解决方案1】:

你可以使用VPATH如下:

~/tmp8> more Makefile

OBJECTS=build/log.o build/src.o
OBJ_DIR=build

all: $(OBJECTS)

VPATH=src:log

$(OBJ_DIR)/%.o: %.c
        @echo compiling "$< ==> $@"

~/tmp8> find . -type f
./src/src.c
./Makefile
./log/log.c    

~/tmp8> make
compiling log/log.c ==> build/log.o
compiling src/src.c ==> build/src.o

~/tmp8>

【讨论】:

  • 谢谢它的工作,只有在排序文件夹名称后才知道为什么。使我拥有的版本是“4.1”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多