首页 > 解决方案 > Makefile 目标规则和 PHONY 问题

问题描述

我知道这可以通过不同的方式完成,但我实际上正在寻找有关 makefile 的更多信息。

我希望能够调用make somefile.txt和运行给定的脚本。

在我当前的文件夹中,我有:

生成文件

%.txt:
    # perl -pe "s/#.*//g; s/^\n//g; s/\n/\t/g;" .txt
    echo "Hi"

当我打电话make时,我得到

make: `somefile.txt' is up to date.

我知道我需要使用.PHONY,但尝试将其与%.txt.

我已经尝试过诸如

files = *.txt
.PHONY = $(files)
%.txt:
    # perl -pe "s/#.*//g; s/^\n//g; s/\n/\t/g;" .txt
    echo "Hi"

但这实际上并没有奏效。

标签: makefile

解决方案


如果您不想在 makefile 中列出要构建的目标,而只是在命令行上提供它们,则可以使用以下命令:

.PHONY: $(MAKECMDGOALS)

变量MAKECMDGOALS将设置为您在命令行中给出的目标集。

重要的是要了解 makefile 不是外壳,因此仅粘贴*.txt在 makefile 中的任何位置并不总是会扩展它。只有 makefile 的特定区域可以直接使用 shell glob。

如果你想总是扩展它,你可以wildcard像这样使用make的函数:

files = $(wildcard *.txt)

推荐阅读