分类: LINUX
2007-12-05 13:36:08
自动创建Makefile的过程 |
这两天开始学习C语言, 写了一会, 发现C 的Makefile是一个很郁闷的事情, 请教一个高手,
告诉俺有自动的工具可以解决问题, 网上找了一个教程, 发现更本不能用, 版本太老了,高手告诉我那个是autoconf版本互不兼容引起的,
于是教我做了下来, 过程如下, 首先我尝试编译两个文件, 一个是主文件,另外是一个库文件, 主文件名是mysql.c 库是co.c, co.h
首先是在那个目录下面 运行
# autoscan
系统会报错, 当是不用管
报的错会像这样
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1 然后是
total 36
-rw-r--r-- 1 root root 0 Jan 26 18:05 autoscan.log -rw-r--r-- 1 root root 439 Jan 26 18:05 co.c -rw-r--r-- 1 root root 49 Jan 26 18:05 co.h -rw-r--r-- 1 root root 454 Jan 26 18:05 configure.scan -rw-r--r-- 1 root root 1117 Jan 26 18:05 mysql.c [root@my5]# mv configure.scan configure.in 然后是编辑 configure.in
里面的内容是
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([co.c]) AC_CONFIG_HEADER([config.h]) # 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_OUTPUT 在其中添加后如下
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([co.c]) AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE(mysql,1.0) # 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 红色是添加的部分
然后在编辑一个文件
Makefile.am
内容如下
bin_PROGRAMS = mysql
mysql_SOURCES = co.c co.h mysql.c INCLUDES=-I /usr/local/mysql/include/mysql mysql_LDADD=-L/usr/local/mysql/lib/mysql -lmysqlclient 然后执行
aclocal; autoheader; automake -a -c --foreign; autoconf;
然后./configure
最后make 一般就OK
其中./configure 可以像其他产品一样 带 prefix这个参数 |