相关疑难解决方法(0)

使用不同的变量值制作多次调用另一个规则的规则

我有一个规则something,适用于变量VAR.我也有另一个规则something-all,需要运行something,以VAR设置为每个值vars.

vars = hello world

something:
    echo $(VAR)

something-all:
    $(foreach VAR,$(vars),something)
Run Code Online (Sandbox Code Playgroud)

我得到了这不太有效

noob@work:~/Desktop$ make something-all
something something
make: something: No such file or directory
make: *** [something-all] Error 1
Run Code Online (Sandbox Code Playgroud)

它应该打印hello\nworld.

我曾经通过检索VAR来通过通配符规则这样做%,但感觉这是错误的方法.这看起来像这样:

vars = hello world

all: $(foreach VAR,$(vars),something-$(VAR))

something-%:
    echo $*
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

13
推荐指数
1
解决办法
477
查看次数

如何通过globbing子目录自动生成make目标列表?

我想使用单个Makefile在数百个子目录中生成目标.每个子目录都是一个日期/时间戳,如下所示:20120119_153957匹配以下模式????????_??????.没有其他子目录与此模式匹配.

我想要生成一个目标????????_??????/graph.pdf.我有一个调用的脚本make_graph,它将使图形被赋予子目录名称.但我不确定如何编写一个Makefile,它将自动为所有子目录添加并以编程方式生成这些目标.

例如,代码SUBDIRS:=????????_??????似乎正确地遍历所有子目录.我可以查看这个规则:

.PHONY: print
print:
        echo $(SUBDIRS)
Run Code Online (Sandbox Code Playgroud)

但是这个变量赋值

TARGETS:=$(SUBDIRS:%=%/graph.pdf)
Run Code Online (Sandbox Code Playgroud)

似乎没有做我期望的事情并分配了很多很多目标.相反,以下规则只打印一个目标.

.PHONY: print
print:
        echo $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

SUBDIRS应该拥有正确的子目录但TARGET只有一个文件是非常令人困惑的.

makefile gnu-make

11
推荐指数
1
解决办法
9870
查看次数

标签 统计

gnu-make ×2

makefile ×2