如何使用cat来合并Makefile中的文件?

如何使用cat来合并Makefile中的文件?

首先,我完全不确定这是否是问这样的问题的正确地点,但是......

我当前正在处理一个目录,并尝试创建一个包含该目录文件的所有内容的文件。要求是我必须通过使用 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]

相关内容