如何防止 make 重新生成 .gitignore?

How to prevent make from regenerating .gitignore?

我刚开始学习使用 make,我想用我的 Makefile 生成一个简单的 .gitignore 文件。我尝试编写该文件的各种版本,但 none 似乎按我期望的方式工作。我遇到的主要问题是 .gitignore 文件每次我 运行 make 时都会重新制作,即使什么都没有改变。

这是我尝试过的方法:

".gitignore" :
    touch .gitignore
    echo 'node_modules' >> .gitignore

每次我 运行 make 时,这都会将 node_modules 重新附加到 .gitignore。如果 .gitignore 周围没有引号,它会失败并显示错误:make: *** No targets. Stop.。我尝试添加一个不会改变的虚假依赖项(即 ".gitignore" : Makefile),但发生了相同的重建。我试过让 .gitignore 依赖于自身,但它只是告诉我循环依赖性已被删除,我得到了相同的行为。我试过使用 GNU make 版本 3.81 和 4.3。

我最终想用 make 生成整个存储库,我不希望文件上的时间戳在 运行 之间改变,因为这会导致 git 出现问题。

引号不是 makefile 中的特殊字符(通常是 speakig)。

这样的规则:

".gitignore" :

告诉 make 你的目标被命名为 ".gitignore" (包括引号)。由于目录中没有以这种方式命名的文件,make 运行您的规则来生成它。

更改规则以删除引号:

all: .gitignore
.gitignore:
        ...

它应该会如您所愿地工作。您不能单独使用 .gitignore 的原因是 make 会特别处理以句点开头的目标:这样的目标不能是 makefile 中的默认目标。