Rik*_*hah 0 ubuntu makefile gnu-make
从docs来看,有必要添加一个targetin.ONESHELL以使所有命令在同一个子 shell 进程中运行。对此的进一步讨论请参见此处。
这是我的makefile,
.PHONY: clean build
.ONESHELL: deploy
zip := my.zip
clean:
cd ..
rm -f $(zip)
build: clean
npm install .
zip -r ../$(zip) . \
--exclude=package-lock.json \
--exclude=.gitignore \
--exclude=makefile \
--exclude=*.git*
... more lines
Run Code Online (Sandbox Code Playgroud)
因此,当我这样做时make build,父文件夹中的 zip 文件就会被创建。当我这样做时make clean(从同一目录),zip 也会从父文件夹中删除。我不明白的是,因为cd ..在独立的 shell 进程中运行,所以父文件夹中的 zip 不包含make clean在 中,因此如何使用命令删除它.ONESHELL?
版本:Ubuntu 18.04 上的 GNU Make 4.1
.ONESHELL不接受先决条件(或者更准确地说,它忽略它们)。如果您定义了它,它将针对整个 makefile 启用。目前无法.ONESHELL仅指定单个目标。
GNU make 手册说:
如果
.ONESHELL特殊目标出现在 makefile 中的任何位置,则每个目标的所有 配方行都将提供给 shell 的单次调用。
以防万一您想知道:这适用于包含的 makefile - 如果其中任何一个指定了.ONESHELL:,则所有其中的每个配方都将应用它。
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |