Makefile 如何防止make重新生成。gitignore?

Makefile 如何防止make重新生成。gitignore?,makefile,gnu-make,Makefile,Gnu Make,我正在学习使用make,我想用我的Makefile生成一个简单的.gitignore文件。我曾尝试编写该文件的各种版本,但没有一个像我预期的那样工作。我遇到的主要问题是,每次运行make时都会重新生成.gitignore文件,即使没有任何更改 以下是我尝试过的: ".gitignore" : touch .gitignore echo 'node_modules' >> .gitignore 这会在每次运行make时将节点_模块重新附加到.gitignore。如果周

我正在学习使用make,我想用我的Makefile生成一个简单的.gitignore文件。我曾尝试编写该文件的各种版本,但没有一个像我预期的那样工作。我遇到的主要问题是,每次运行make时都会重新生成.gitignore文件,即使没有任何更改

以下是我尝试过的:

".gitignore" :
    touch .gitignore
    echo 'node_modules' >> .gitignore
这会在每次运行make时将节点_模块重新附加到.gitignore。如果周围没有引号。gitignore将失败,错误为:make:**No targets。停止我尝试添加一个不改变的伪依赖项,即gitignore:Makefile,但发生了相同的重建。我已经尝试使.gitignore依赖于自身,但它只是告诉我循环依赖被删除,我得到了相同的行为。我尝试过GNU make版本3.81和4.3


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

在makefile中,引号通常不是特殊字符

这样的规则:

".gitignore" :
告诉make您的目标已按字面意思命名,.gitignore,包括引号。由于目录中没有以这种方式命名的文件,make将运行您的规则来生成它

更改规则以删除引号:

all: .gitignore
.gitignore:
        ...

它应该像你期望的那样工作。不能单独使用.gitignore的原因是make特别处理以句点开头的目标:这样的目标不能是makefile中的默认目标。

是否依赖于任何文件中的.gitignore?那么,是否有一个文件的更改会影响.gitignore的内容?您希望Make何时修改该文件?这看起来并不是Make的一个很好的用途。谢谢,这很有效。设定次级目标的术语是什么?这样我才能更深入地研究它?我不知道你说的副目标是什么意思。一个目标被确定为该makefile的默认目标。其他每一个目标都不是默认目标。您可以在此处阅读更多关于此的信息: