AutoMake是什么
如果你知道CMake,那么就非常好理解AutoMake,无论是CMake还是还是AutoMake,他们的最终目的都是为了方便程序进行跨平台编译。
CMake的产生晚于AutoMake,在设计理念和思路上都有差异,从个人的使用体验上来说,CMake更加现代化。
AutoMake的几个核心文件的关系
- autoreconf读取
Makefile.am
和configure.ac
产生Makefile.in
- 生成的configure脚本,读取
Makefile.in
产生Makefile
,编译可配置变量可以通过./configure --help
查看
- 执行
make
命令,进行程序的编译
以上就是使用AutoMake时,大概发生的一个流程逻辑,AutoMake目的就是让程序员只写一个规则:.am文件、ac文件,就能生成适合各种配置、平台的Makfiles。
一个最简单的程序:Hello Automake
我在Github上编写了一个HelloWorld,从仓库中可以看到对于一个Automake程序,有效的文件有:
- Makefile.am
- configure.ac
通用的编译过程
为:
autoreconf --install ./configure make
AutoMake语法
这里仅仅是记录了自己所了解到的语法,并没有深究具体的含义
关键字 | 解释 |
SUBDIRS | 指定需要递归automake的子文件夹,即存在Makefile.am的子文件夹 |
xxx_SOURCES | 程序的源代码 |
xxx_PROGRAMS | 程序的名字 |
举个例子:
SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR)
很明显,源码就在lib、include等,AutoMake会自动去递归检索这些目录,重新遍历Makefile.am
。
更多的语法就不再展开了,毕竟相对CMake来说,AutoMake已经是非常古老的轮子了,只有非常老旧的项目在使用,大部分的项目慢慢都选择了CMake。
如何跨平台编译
需要在对应的平台上执行通用的编译过程
,AutoMake会根据运行环境,生成不同的Makefile。