Bor*_*bus 6 c assembly automake autoconf autotools
我正在开发一个目前用C语言编写的项目,但我计划在ASM中为至少两个平台(x86_64和arm)编写一些函数.所以我可能有一些源文件:
我喜欢它,以便配置脚本在可能的情况下选择.s文件.c文件.所以建立在arm上将是one.s,two.c,three.c等.
使用Automake很难或不可能做到这一点.但如果我放弃Automake,我将不得不追踪自己的依赖(呃).
最好的方法是什么?
automake 手册的条件源部分应该为您指明正确的方向。你会想要AC_CANONICAL_HOST加入configure.ac,然后根据 的价值做出决定$host。
automake如果两个文件可以编译为同一个对象,我不会喜欢它。如果您无法像手册的链接部分中那样重命名源,您可能需要尝试类似的操作(确保您subdir-objects有AM_INIT_AUTOMAKE:
# Note the $() isn't a shell command substitution.
# The quoting means it'll be expanded by `make'.
MODULE_ONE_OBJ='generic/one.$(OBJEXT)'
MODULE_TWO_OBJ='generic/two.$(OBJEXT)'
case $host in
# ...
arm*)
MODULE_ONE='arm/one.$(OBJEXT)'
;;
x86_64)
MODULE_TWO='x86/two.$(OBJEXT)'
;;
esac
AC_SUBST([MODULE_ONE])
AC_SUBST([MODULE_TWO])
Run Code Online (Sandbox Code Playgroud)
在Makefile.am:
bin_PROGRAMS = foo
foo_SOURCES = foo.c
EXTRA_foo_SOURCES = arm/one.s x86/two.c
foo_LDADD = $(MODULE_ONE) $(MODULE_TWO)
foo_DEPENDENCIES = $(MODULE_ONE) $(MODULE_TWO)
Run Code Online (Sandbox Code Playgroud)