gpt4 book ai didi

makefile - 在 makefile 中使用多个源文件扩展名

转载 作者:行者123 更新时间:2023-12-03 06:39:30 24 4
gpt4 key购买 nike

我有一个 C++ 项目,其中包含各种源文件扩展名(.cpp、.c、.cc)和各种头文件扩展名(.hpp、.h、.hh)。源文件位于名为 SRC 的目录中,头文件可以预见地位于名为 INC 的目录中。

我想用类似的规则编译源代码

vpath %.c $(SRC)

%.o: %.c
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)

如果我知道源文件的格式为 %.c,这当然有效,但在有多个可能的文件扩展名的情况下,我也需要为 %.cpp 和 %.cc 构建类似的规则。当然,编写三个规则并不是什么大问题,但是如果能够使用这个 makefile 作为任何项目的拖放功能,即使是使用不同的语言,而无需重新编写规则,那就太好了。

那么我如何编写一个规则(或实现相同目标的其他结构),其工作原理如下:

SRC_EXT = cpp c cc
vpath %.$(SRC_EXT) $(SRC)

%.o: %.$(SRC_EXT)
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)

感谢您的帮助。

最佳答案

你不能在标准 POSIX make 中。不过,既然你提到了 vpath,我就假设你正在使用 GNU make。如果您有足够新的版本(3.81 或更高版本),您可以使用 call 和 eval 轻松完成此操作:

SRC_EXT = cpp c cc

define compile_rule
%.o : %.$1
$$(COMPILER) $$(FLAGS) $$< $$(INCFLAG)$$(INC)
endef
$(foreach EXT,$(SRC_EXT),$(eval $(call compile_rule,$(EXT))))

如果您没有足够新的 GNU make,或者更喜欢替代解决方案,则可以使用生成的 makefile 执行相同的操作。

关于makefile - 在 makefile 中使用多个源文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8969015/

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