gpt4 book ai didi

Makefile、模式规则和目录

转载 作者:行者123 更新时间:2023-12-03 21:23:18 24 4
gpt4 key购买 nike

我想为编译器编写一个 (gmake) 生成文件 - 与 gcc 不同 - 将所有输出文件放入特定目录。不幸的是,这种行为无法改变。

我的来源在多个目录中。我如何编写一个模式规则来让我编译源代码。

好吧,这有点不清楚。这是一个例子。我的消息来源可能是这样的:

./folder1/foo.c
./folder2/bar.c

输出文件最终会是这样的:
./obj/foo.obj
./obj/bar.obj

我的源代码编译规则应该是什么样的?
%.obj : %.c 
$(COMPILER) -c $<

不管用。

有任何想法吗?我想避免每个源文件的隐式规则......

最佳答案

从我的一些 Makefile 中提取:
OBJS := $(sort $(patsubst %.cpp,$(OBJECT_DIRECTORY)/%.o,$(patsubst %.c,$(OBJECT_DIRECTORY)/%.o,$(notdir $(SRCS)))))
哪里OBJECT_DIRECTORY指向对象目录和 SRCS是源文件列表(您甚至可以使用 $(wildcard) 填充)。

然后在 Makefile 中,我有:

define define_compile_rules
$(OBJECT_DIRECTORY)/%.o: $(1)%.c
@echo " + Compiling '$$<'"
@mkdir -p $$(@D)
$(CC) $$(CFLAGS) -o $$@ -c $$<
endef

$(foreach directory,$(sort $(dir $(SRCS))),$(eval $(call define_compile_rules,$(directory))))

the $(eval) function .

关于Makefile、模式规则和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com