相关疑难解决方法(0)

为什么GNU Make罐头食谱不起作用?

我期待看到下面的makefile创建的文件foo1foo3.但是只创建了一个文件foo3.对我而言,似乎罐头配方make-foo被make简单地忽略了.目标foo1foo2(空配方)的调试结果是相同的.

# why canned recipe doesn't work ?
# http://www.gnu.org/software/make/manual/make.html#Canned-Recipes
define make-foo =
echo making $@
touch $@
endef

.PHONY: all
all: foo1 foo2 foo3

# foo1 is not created, but why ?
.PHONY: foo1
foo1:
    $(make-foo)

# debug output similar to foo1
.PHONY: foo2
foo2:

# this works
.PHONY: foo3
foo3:
    echo making $@
    touch $@
Run Code Online (Sandbox Code Playgroud)

跑步:

xxxx@xxxx:/dev/shm$ make -dRr
GNU Make 3.81
Copyright (C) 2006  Free …
Run Code Online (Sandbox Code Playgroud)

gnu-make

18
推荐指数
1
解决办法
5093
查看次数

如何在生产配方中处理极长的文件列表?

因为GNUmake允许变量与内存允许的一样大,所以构建大量依赖列表没有问题.但是,如果要在配方中实际使用这些文件列表(用于构建目标的shell命令序列),则会遇到问题:命令可能超出shell的命令行长度限制,从而产生错误,例如"参数"列表太长了".

例如,假设我想连接列表中包含的几个文件$(INPUTS)以生成文件combined.txt.通常,我可以使用:

combined.txt: $(INPUTS)
        cat $^ > $@
Run Code Online (Sandbox Code Playgroud)

但是,如果$(INPUTS)包含数千个文件,就像在我的情况下那样,调用cat太长并且失败.有没有办法解决这个问题?可以安全地假设存在一些与一个巨大命令具有相同行为的命令序列 - 在这种情况下,一系列cat命令(每个输入文件一个)>>用于追加combined.txt将起作用.但是如何make说服生成这些命令呢?

makefile

9
推荐指数
1
解决办法
2897
查看次数

标签 统计

gnu-make ×1

makefile ×1