一、前言
Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有文件都需要重新编译,Makefile中记录着文件的信息,在make的时候就会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是让编译器知道编译一个文件需要依赖其他哪些文件。当依赖文件有了改变,编译器会自动检测到之前的文件已经过时,进而重新编译相应的模块。
本文将介绍使用autotools工具集生成符合Linux规范的Makefile文件。
二、安装工具集
autotools是一个系列工具,包含了以下软件:
aclocal autoscan autoconf autoheader automake etc.
通常在安装以上某一个软件后,就会自动安装autotools系列工具,所以执行以下命令即可安装,但也要注意查缺补漏。网上也有较多手动安装的教程,可自行了解。
sudo apt-get install autoconf
三、入门使用
下图为使用autotools工具集生成Makefile的流程图:
根据流程图我们来实现编译一个hello world程序。
// hello.cc
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
首先进入项目根目录,执行autoscan,在当前目录下会生成configure.scan文件。
我们需要将confiugre.scan重命名为confiugre.in文件(.in后缀为旧写法,执行命令时可能会报错,这里建议改成.ac后缀)。confiugre.ac调用一系列autoconf宏来测试程序需要的或用到的特性是否存在,以及这些特性的功能。
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL