在Linux环境下编程,Makefile是不可回避的,手写一个Makefile文件或许难度不高,如果要写一个符合自由软件惯例的Makefile就没那么容易了。

因此,GNU出了一套生成Makefile的工具,便是本文的主题。让我们从最简单的hello程序入手,一起摆弄一下这套程序。

1.工程目录及程序代码准备

假设我们的工程目录是 ~/Desktop/makefiletest/,并在该目录下编写hello.c文件,内容如下:

#include <stdio.h>

int main()
{
	printf("Hello makefile!\n");

	return 0;
}

2.Makefile.am文件准备

在工程根目录下编写Makefile.am文件,内容如下:

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCE=hello.c

3.autoscan 生成 configure.ac

在工程根目录下命令行执行autoscan命令,他会扫描当前目录下的源代码文件,生成configure.scan文件。

将configure.scan文件重命名为configure.ac(有些版本会改成configure.in),然后编辑该文件,如下:

#                                               -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.71])
AC_INIT([hello],[1.1])
AC_CONFIG_SRCDIR([hello.c])
#AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

主要是修改AC_INIT行,并添加AM_INIT_AUTOMAKE行。

然后执行 autoupdate 命令。

4.aclocal 生成 aclocal.m4

在工程更目录下执行 aclocal 命令,生成 aclocal.m4文件。

5.autoconf 生成 configure

在工程更目录下执行 autoconf 命令,生成 configure 文件。

6.automake 生成 Makefile.in

在工程更目录下执行 automake 命令,生成 Makefile.in 文件。

 7.configure 生成 Makefile

在工程更目录下执行 configure 命令,生成 Makefile 文件。

 8.make 执行编译结果

在工程更目录下执行 make 命令,生成 hello 可执行文件。

执行hello程序,得到输出结果:

 至此,整个GNU项目管理工具玩转了一遍。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐