使用 GNU Make 针对多个嵌入式硬件平台的方法

Methods for Targeting Multiple Embedded Hardware Platforms with GNU Make

如何确保为一个硬件目标编译的目标文件不会用于需要以不同方式编译的不同硬件目标?

我在学习嵌入式开发的同时使用了 GNU ARM 嵌入式工具链。我已经有几个开发板(带有 STM32F0 和 STM32F4 处理器),并计划在未来制作自己的开发板。我想使用通用软件存储库进行多次硬件迭代。

显然,我的 Makefile 中将有多个目标,为每个平台调用适当的定义和编译器标志,并且可能 make all 一次为所有平台构建。据我了解,make 是一个增量构建系统,如果源文件已更改,它只会重新编译目标代码 (*.o) 文件,如果我使用不同的定义和选项,它不会重新编译,错误的目标代码将传递给链接器。

似乎我可以在不同目标之间切换时努力make clean,但这将依赖于人为操作,如果我忘记了可能会产生糟糕的构建,并且不能用于make all 为各自的硬件生成多个二进制文件。

编辑笔记: 根据反馈意见,我已经缩短并重新排列以使问题更清楚 objective。我不是一般地问如何使用 Make,而是如何防止,比如 mylib.o 被编译为 STM32F0,然后在构建中被重新用于 STM32F4。

我对替代工具很好奇,欢迎在评论中讨论,但这个问题是针对 GNU Make 的。

为了避免在目标之间进行干净构建的需要,每个目标都必须有单独的构建目录,以便目标依赖项是独立的,并且使用适当的工具链和构建开关等专门生成。