运行 包含命令的 makefile
Run makefile with command in order
我有以下 Makefile,当你在 CLI 中输入 make 时,它 运行 所有目标,我知道你可以 运行 具有特定目标的 make
但是有没有办法 运行 制作多个目标?
例如 通过 cli 运行 module1 pack cleanup
按此顺序
- module1
- pack
- cleanup
(仅模块 2 不会 运行)
我不想为上述 3 个步骤创建新目标
这是例子
all: module1 module2
.PHONY: module1
module1:
@echo "run module 1"
DIR=$(PWD)
@echo $(DIR)
.PHONY: module2
module2:
@echo "run module2”
pack:
pack $(DIR)
cleanup:
gbt clean $(DIR)
您可以为此使用 MAKECMDGOALS
。类似于:
PACK := $(filter pack,$(MAKECMDGOALS))
CLEANUP := $(filter cleanup,$(MAKECMDGOALS))
module1: $(PACK) $(CLEANUP)
...
module2: $(PACK) $(CLEANUP)
...
pack:
pack $(DIR)
cleanup:
git clean $(DIR)
如果您不在命令行中提供 pack
或 cleanup
目标,则相关变量 PACK
和 CLEANUP
将是空字符串并赢得'不被列为 module1
或 module2
等
的先决条件
你不想运行他们"in order"。 make 的全部目的是让它决定做什么以及按什么顺序。 Makefile 用于列出规则和依赖项,以便 make 可以正常工作。
如果你想要命令运行,写一个脚本。
我有以下 Makefile,当你在 CLI 中输入 make 时,它 运行 所有目标,我知道你可以 运行 具有特定目标的 make 但是有没有办法 运行 制作多个目标?
例如 通过 cli 运行 module1 pack cleanup
按此顺序
- module1
- pack
- cleanup
(仅模块 2 不会 运行) 我不想为上述 3 个步骤创建新目标 这是例子
all: module1 module2
.PHONY: module1
module1:
@echo "run module 1"
DIR=$(PWD)
@echo $(DIR)
.PHONY: module2
module2:
@echo "run module2”
pack:
pack $(DIR)
cleanup:
gbt clean $(DIR)
您可以为此使用 MAKECMDGOALS
。类似于:
PACK := $(filter pack,$(MAKECMDGOALS))
CLEANUP := $(filter cleanup,$(MAKECMDGOALS))
module1: $(PACK) $(CLEANUP)
...
module2: $(PACK) $(CLEANUP)
...
pack:
pack $(DIR)
cleanup:
git clean $(DIR)
如果您不在命令行中提供 pack
或 cleanup
目标,则相关变量 PACK
和 CLEANUP
将是空字符串并赢得'不被列为 module1
或 module2
等
你不想运行他们"in order"。 make 的全部目的是让它决定做什么以及按什么顺序。 Makefile 用于列出规则和依赖项,以便 make 可以正常工作。
如果你想要命令运行,写一个脚本。