gpt4 book ai didi

arrays - 如何在Makefile中将变量列表用作目标?

转载 作者:行者123 更新时间:2023-12-03 10:50:37 27 4
gpt4 key购买 nike

假设我正在制作一个makefile,并且在顶部有以下变量声明:

FILES = file1.cpp file2.cpp file3.cpp

现在假设我想用一个特殊的命令来编译每个对象,而不用像这样指定每个目标:
file1.o : file1.cpp
custom_command file1.cpp
file2.o : file2.cpp
custom_command file2.cpp
file3.o : file3.cpp
custom_command file3.cpp

使用上面声明的 $(FILES)变量是否有更好的方法?

就像是:
$(FILES:.cpp=.o) : $(FILES)
custom_command $(FILES)

...只需要对 $(FILES)变量中的每个文件执行此操作。

最佳答案

是。有所谓的模式规则。一个例子最容易理解:

%.o: %.cpp
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

(请记住,Makefile文件需要使用制表符)。该规则描述了如何从cpp文件制作目标文件。

如果您不希望使用如此宽泛的规则,则可以使用所谓的静态模式:
objects = file1.o file2.o file3.o

all: $(objects)

$(objects): %.o: %.cpp
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

这是GNU Make手册中有关 static pattern rulespattern rules的部分。

关于arrays - 如何在Makefile中将变量列表用作目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320416/

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