Makefile:确保可选依赖项的顺序

Makefile:确保可选依赖项的顺序

我正在编写一个用于使用微控制器的 makefile。

各种 PHONY 目标包括:

  • 构建 - 构建项目
  • flash - 闪烁 MCU
  • 串行 - 打开 Minicom 串行接口

这些都不严格依赖于另一个 - 例如我可以打开串行而不重建或重新刷新。

但是,如果还指定了其他目标(例如make flash serial),则需要遵守一定的顺序(在刷新之前构建,在打开串行之前刷新)。

Make 正在启用并发 ( -j) 的情况下运行,我不想更改它。

如何定义可选依赖项,以确保目标的排序,而不需要每次都检查/更新这些依赖项(除非有要求)?

答案1

这是为 GNU Make 编写的,我不知道 MAKECMDGOALS 是 GNU-only 还是 POSIX。

Make 明确要求构建的目标位于MAKECMDGOALS变量中。

我们可以过滤它来定义可选依赖项,以用于排序目的:

after = $(filter $(strip $1), $(MAKECMDGOALS))

post_build = $(call after, build)
post_flash = $(call after, flash) $(post_build)

...

.PHONY: build flash serial debug

...

flash: | $(post_build)
        st-flash ...

serial: | $(post_flash)
        minicom ...

debug: | $(post_flash)
        $(GDB) ...

那样:

  • make build将构建该项目
  • make flash将使用当前版本刷新 MCU
  • make serial将打开串行接口
  • make flash serial(或反之亦然)将刷新 MCU,然后打开串行接口。
  • make build flash将构建项目,然后刷新 MCU。
  • make build flash serial(以任何顺序)将首先构建,然后闪存,然后打开串行接口。

相关内容