首先,我完全不确定这是否是问这样的问题的正确地点,但是......
我当前正在处理一个目录,并尝试创建一个包含该目录文件的所有内容的文件。要求是我必须通过使用 Makefile 中的规则来完成此操作。目前,我的 makefile 在顶部有一个文件列表,然后是一些其他规则,然后是我对规则的悲伤尝试。我遇到的问题是我不断收到“没有规则可以使 y 需要目标 x”。我认为问题出在我的食谱或我的先决条件上。所以:
FILES= file1 file2 file3 file4 file5...
directory_name/all.txt: **HERE IS THE PART IDK ABOUT**
cat $^ > $@
我对 make 命令和一般编码非常陌生,所以这可能是一个愚蠢的问题,但我仍然在其他地方网上找不到任何令人满意的答案。我一直在尝试通过其目录(如directory_name/%.txt 或其他内容)引用文件,或者仅将文件列为先决条件,但没有任何效果。
答案1
你的规则可能看起来像
directory_name/all.txt: $(FILES)
cat $(FILES) > $@
这将提供最大的可移植性,以便该规则适用于 GNUmake
和 BSD make
(它们可能无法理解$^
;您没有说明您正在使用哪种实现)。请注意,包含命令的行cat
需要使用制表符缩进。
答案2
依赖项列表就是 $(FILES)。
基本上,这只是扩展了指定的列表。因此,如果任何有助于其有效性的文件比目标本身更新,则目标将被重新创建。
如果您有模式,有一个速记可以通配符文件。对于你的例子,可能只是:
FILES= file[1-9]