提问:为什么我的Makefile中存在同名目标,却没有报错?(一个目标下有命令,另一个目标下没有命令)
-------------------------------
详细描述:
我正在做PA2.2中的蓝框任务:阅读相关Makefile, 尝试理解abstract-machine是如何生成native的可执行文件的。
使用 native 作为运行时环境并运行 recursion 测试用例的方式是在 ${AM_KERNEL}/tests/cpu-tests 文件夹下
执行命令: make ARCH=native ALL=recursion run。于是,我从 ${AM_KERNEL}/tests/cpu-tests 文件夹下的
Makefile 开始追踪。
接着我追踪到了 ${AM_HOME}/Makefile 以及 这个Makefile 所include的 $(AM_HOME)/scripts/native.mk 两个Makefile文件。
我在 $(AM_HOME)/scripts/native.mk 下找到了 “run” 目标,“run”目标的依赖是“image”。
这时我遇到了让我困惑的事情,在 ${AM_HOME}/Makefile 以及 $(AM_HOME)/scripts/native.mk 下都有 image 目标,
只不过 ${AM_HOME}/Makefile 下的 image 目标没有需要执行的命令,而 $(AM_HOME)/scripts/native.mk 下的 image 目标
有需要执行的命令,如下两图。
我试着在 ${AM_HOME}/Makefile 下的 image 目标下插入了 一个echo 命令,结果再执行 make ARCH=native ALL=recursion run 就会报错,
这说明这两个 image 目标都在 make 构建过程中发挥了作用。
-------------------------------
为了解决我的问题,我做了如下尝试:
1. STFW。Google 搜索 “duplicate target in Makefile”。在这个网页我找到了答案 https://docs.oracle.com/cd/E19504-01/802-5880/make-24/index.html