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

标签 arrays variables makefile target

假设我正在制作一个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/

相关文章:

javascript - 将一项添加到数组中,而不是使用 javascript 重新列出整个数组

python - 创建一个列表,其中某个字符出现一定次数

javascript - 添加事件监听器的最佳实践(javascript、html)

node.js - 无法在 Debian 7 Wheezy (WM) 上安装 node.js

java - 为多个 .java 文件创建 java makefile (ubuntu)

Javascript 的 indexOf 垫片说明?

c++ - 自动售货机项目

c++ - 从 for 循环到另一个循环的变量

带有 shell 命令和变量的 c makefile

java - PyLucene 的 Make 和 Make install 出现问题