【发布时间】:2011-02-04 03:15:24
【问题描述】:
我正在开发一些在 ARM 上运行的裸机嵌入式代码,因此必须处理整个 ARM 与 THUMB 模式的区别。当前的构建系统使用静态模式规则来确定是以 ARM 模式还是 THUMB 模式编译文件。
$(ACOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@
$(TCOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@
其中 ACOBJS 是应处于 ARM 模式的输出对象列表,对于 TCOBJS 和 Thumb 模式也是如此。这些列表是以通常的方式从源列表创建的
ACOBJS = $(ACSRC:.c=.o)
TCOBJS = $(TCSRC:.c=.o)
目前,这会导致构建中的目标文件散布在源代码树上,我并不特别希望这样做。我一直在尝试将其设置为树外构建,但无法使其正常工作。我不一定需要完全摆脱树构建的工作,但我希望至少能够使用一个输出目录,所有中间文件最终都会在该目录下运行。在这些限制条件下实现这一目标的最佳策略是什么?
我正在考虑的一个选项是使用 automake 或整个 autotools 工具链来构建 makefile。这似乎支持创建我想要的 makefile 类型,但似乎有点矫枉过正。似乎在为便携式构建而设计的自动工具和裸机嵌入式系统之间存在固有的阻抗不匹配,其中主机元组之类的东西由目标微决定。
【问题讨论】:
-
您希望所有的目标文件、可执行文件和库都进入同一个输出目录吗?
-
将所有内容都放在同一个目录中是可以的,尽管不是最好的情况。我目前通过将静态模式规则替换为目标特定的适当标志添加到 CFLAGS 来完成这项工作。 github.com/MegabytePhreak/power_supply/blob/master/rules.mk 显示我目前的工作方式。
标签: build-process makefile gnu-make