makefile制作
来源:互联网 发布:淘宝退货率高了怎么降 编辑:程序博客网 时间:2024/04/26 22:34
无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。
但是如果通过查阅make的帮助文档来手工编写Makefile,对任何程序员都是一场挑战。幸而有GNU提供的Autoconf及Automake这两套工具使得编写Makefile不再是一个难题。
本文将介绍如何利用 GNU Autoconf 及 Automake 这两套工具来协助我们自动产生 Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需“./configure”,“make”,“make install” 就可以把程序安装到系统中。
2. 操作过程
首先进入目标project目录,在该目录下运行一系列命令,创建和修改几个文件,就可以生成符合该平台的Makefile文件,操作过程如下:
1) 运行autoscan命令;
2) 将configure.scan 文件重命名为configure.ac,并修改configure.ac文件;
3) 在project目录下新建Makefile.am文件,并在它的子目录下也新建makefile.am文件;
4) 在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS四个文件;
5) 依次运行aclocal、autoconf和autoheader三个命令;
6) 编写Makefile.am文件;
7) 再运行automake -a命令(或automake --add-missing);
8) 最后运行./confiugre脚本,这一步即会生成Makefile文件。
可以通过下图看出生成Makefile的全流程:
图 Figure 1 生成Makefile流程图
从上图可以看出,生成Makefile的过程中,关键是要编写好configure.in和Makefile.am两个文件。下面以一个简单示例来演练生成Makefile文件的操作过程。
3. 简单示例
下面以一个简单的示例来具体介绍Makefile是如何生成的。
1) 编写源代码
创建一个子目录hello,并在这个目录下新建一个hello.cpp源代码文件,hello.cpp的内容为:
#include <stdio.h>
int main()
{
printf("Hello, world/n");
Return 0;
}
2) 在hello目录下运行autoscan命令
执行完autoscan之后,会在当前目录下生成一个configure.scan文件,通常可以用它作为configure.ac文件的蓝本。
jayyi@tsf-dev:~/hello$ autoscan
jayyi@tsf-dev:~/hello$ ls
configure.scan hello.cpp
3) 将configure.scan重命名为configure.ac,并修改其内容为(蓝色部分是新增或修改的):
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(hello, 1.0, [jayyi@tencent.com])
AC_CONFIG_SRCDIR([hello.cpp])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(hello, 1.0)
# Checks for programs.
AC_PROG_CXX
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile])
4) 执行touch NEWS README AUTHORS ChangeLog以生成四个空文件
jayyi@tsf-dev:~/hello$ touch NEWS README AUTHORS ChangeLog
5) 依次执行aclocal、autoconf和autoheader三个命令,以生成必要的文件
jayyi@tsf-dev:~/hello$ aclocal;autoconf;autoheader
这些必要的文件包括aclocal.m4,config.h.in,configure等。
6) 在当前目录下编写Makefile.am文件,文件内容为:
AUTOMAKE_OPTIONS= foreign
bin_PROGRAMS= hello
hello_SOURCES= hello.cpp
7) 再运行automake -a命令 jayyi@tsf-dev:~/hello$ automake -a
在这一步之后,就可以通过执行当前目录下的configure脚本来生成Makefile文件了。
8) 运行当前目录下的configure脚本生成Makefile文件
jayyi@tsf-dev:~/hello$ ./configure
如果需要指定安装目录,则带参数方式运行configure,如:
jayyi@tsf-dev:~/hello$ ./configure --prefix=安装目录
9) 现在在当前目录下已经生成了Makefile文件,下个“make”指令就可以将hello.cpp编译成可执行程序hello
jayyi@tsf-dev:~/hello$ make
make all-am
make[1]: Entering directory `/data/home/jayyi/hello'
if g++ -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT hello.o -MD -MP -MF ".deps/hello.Tpo" -c -o hello.o hello.cpp; /
then mv -f ".deps/hello.Tpo" ".deps/hello.Po"; else rm -f ".deps/hello.Tpo"; exit 1; fi
g++ -g -O2 -o hello hello.o
make[1]: Leaving directory `/data/home/jayyi/hello'
jayyi@tsf-dev:~/hello$ ./hello
Hello, world
最后,你还可以试试“make install”,“make uninstall”,“make dist”等有什么效果。由于篇幅有限,这篇简介只介绍了automake的皮毛罢了,如果较系统的掌握automake的使用,请参见其它讲解比较全面深入的文档。
4. 附示例代码:
Hello示例代码使用方法:
1) 在linux服务器上新建一个hello目录
2) 将hello.cpp,configure.ac和Makefile.am三个文件以ascii码方式上传到linux服务器的hello目录下
3) 登录到linux服务器,并进入hello目录
4) 使用touch创建NEW,README,AUTHORS,ChangeLog四个空文件:
touch NEW README AUTHORS ChangeLog
5) 依次执行如下命令:
aclocal,autoconf,autoheader,automake -a
经过第5步之后,会在hello目录下生成一个configure可执行shell脚本文件。
6) 在hello目录下运行configure,以生成Makefile文件,运行configure的格式为:
./configure --prefix=<安装目录>
7) 进行make,以生成hello可执行程序
执行完configure之后,会在hello目录下生成一个Makefile文件,这个时候就可以make了,在hello目录下执行make即可完成编译
8) 在hello目录下运行hello可执行程序
./hello
即可看到屏幕输出:Hello, world
- makefile制作
- 制作Makefile
- Makefile文件制作
- Makefile 制作步骤
- makefile文件的制作
- autotools制作Makefile
- 18.4.2 制作Makefile
- 轻轻松松制作Makefile
- 自己动手 制作makefile
- gcc和makefile制作
- makefile文件的制作
- 简单制作Makefile 文件
- makefile 制作 转载
- Makefile制作基础
- 0721Makefile的制作
- makefile的简单制作
- autools工具制作Makefile
- makefile文件制作
- UP-NETARM3000问题(1)
- [ 青涩的ASP ]ASP模式为什么失败
- Debug与Release的区别
- VC6.0的若干实用小技巧
- asp+access 怎样才能随机抽数据库中的记录?
- makefile制作
- struts多国语言国际化处理(现以中文英文切换为例)
- RED-BLACK TREES
- 嵌入式设备上的 Linux 系统开发
- java的static用法
- Linux 安装软件方法
- 关于eMule服务器
- 一个写日志的类
- 一个高人的自述