【问题标题】:makefile not running .PHONY targetmakefile 未运行 .PHONY 目标
【发布时间】:2020-03-11 17:53:13
【问题描述】:

当我尝试运行以下 makefile 时,它​​没有运行 .PHONY 目标,有人知道为什么吗?

node_modules: package.json
   npm install

.PHONY: puppeteer-deps
puppeteer-deps:
   sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 lib    gtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca    -certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget```

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    Make 只尝试构建它需要的目标,以满足目标。不需要创建目标的目标不会运行。将目标设为.PHONY 并不会改变这一事实:它只是说如果 需要构建一个目标并且 它被标记为.PHONY,那么它将始终被构建.

    在 make 中,目标是在其命令行上为 make 指定的目标,或者,如果在命令行上没有指定目标,则为 makefile 中的第一个目标。

    在这里,如果您运行 make,您的目标是 node_modules,并且由于该目标和该目标的任何先决条件都没有列出 puppeteer-deps 作为先决条件,因此不会构建它。

    考虑一下您是否有一个clean 目标,标记为.PHONY...您肯定不希望该目标始终运行!

    【讨论】: