一些背景知识:我有一个基于 ESP-IDF 的项目,它有一个复杂的内置构建系统,您可以使用自己的 makefile 插入该系统(他们使用它的文档)。
这工作正常(除了偶尔可怕的构建时间),但现在我想为组件的单元测试添加一个构建目标,这需要针对另一个项目(the unit-test-app
)构建这个组件。
make
所以,我需要另一个构建目标,它使用另一个生成文件和目录调用另一个。像这样的东西很好用:
make -C $(path to unit-test-app) \
EXTRA_COMPONENT_DIRS=$(my component directory) \
TEST_COMPONENTS=$(my component name) \
ESPPORT=$(my serial port) \
-j clean app-flash monitor
但前提是我从 bash 执行它。如果我尝试从另一个 makefile 执行它,它要么找不到一些头文件(主项目和单元测试项目的包含路径不同),要么忽略项目(-C
参数)的更改并执行主项目构建。
我尝试了什么:
- 在自定义目标中使用
$(MAKE)
,$(shell which $(MAKE))
和make
- 使用
env -i $(shell which $(MAKE) ) -C ...
with 将所需的环境参数转发给子 make - 使用
bash -l make -C ...
和bash -c make -C ...
什么可行,但很脏:echo $(MAKE) -C ...
在 make 目标中使用,然后$(make tests)
从命令行运行。
据我所知,这是父makefile在我没有将子makefile与之分开的环境中设置的问题。我还能做些什么来将这两者分开?
更新:我创建了一个更清楚地显示问题的示例项目,请查看https://github.com/chanibal/esp-idf-template-with-unit-testsMakefile
的顶部