Yukang's Page

using automake

2010-08-21

以前都是手写makefile,没使用automake之类的工具,今天看了一些相关资料,简单地总结一下,留个备份。

使用Makefile

unix/linux下面使用相当广泛,对于简单一些的程序,手写makefile还是比较容易的,只要指定清目标文件,
最后可执行文件的依赖关系。使用一些高级一点的功能更方便,比如下面这个就比较好用,稍微编辑一下就可以用于常用的小工程。
这个Makefile把所有.cpp的文件编译成相应的.o文件,然后链接为Targetfile文件。

CC = g++  -O2
LD = g++
TARGET = Targetfile
SOURCES = $(wildcard *.cpp)
OBJS = $(patsubst %.cpp,%.o,$(SOURCES))

%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o $@

Targetfile:$(OBJS)
$(CC) $(OBJS) -lglut -lglui -o Targetfile

clean:
@/bin/rm *.o

使用automake等工具

1. 首先运行autoscan,这之后会生成一个configure.scan文件,修改为configure.in,并编辑。典型的一个文件如下,
AC_CONFIG_SRCDIR,AC_CONFIG_HEADER这两项还不知道干什么用的,如果不注释掉后面automake会出现错误,那就先注释掉吧。
重点修改AC_INIT,AC_INIT_AUTOMAKE。AC_CHECK那些不用管,后面提示-lglui提示要注意,这是需要链接的库文件,这里链接glui这个库。

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

AC_PREREQ(2.61)
AC_INIT(TSPdemo, 1.0, moorekang@gamil.com)
AM_INIT_AUTOMAKE(TSPdemo, 1.0)
#AC_CONFIG_SRCDIR([Elastic_Alg.cpp])
#AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC

# Checks for libraries.
# FIXME: Replace main<span style="color: #deb887;">' with a function in-lglui’:
AC_CHECK_LIB([glui], [main])
# FIXME: Replace main<span style="color: #deb887;">' with a function in-lglut’:
AC_CHECK_LIB([glut], [main])

# Checks for header files.

AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T

# Checks for library functions.

AC_CHECK_FUNCS([sqrt])
#AC_CONFIG_FILES([makefile])
AC_OUTPUT(Makefile)

  1. 编写Makefile.am,如下面这样。和makefile一样,写上可执行文件依赖于的源文件,_LDADD是要链接的库文件名。

    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=TSPdemo
    TSPdemo_SOURCES= Elastic_Alg.cpp MyMap.cpp mathlib.cpp \
    Elastic_Alg.h MyMap.h mathlib.h \
    LaoMan.cpp SOM.cpp pointdef.h \
    LaoMan.h SOM.h main.cpp
    TSPdemo_LDADD = -lglut

  2. 然后执行aclocal,和autoconf,最后automake —add-missing 生成configure文件。这就完成了,下面就是unix下编译安装软件的三个步骤了,
    ./configure,make,makeinstall等。

写得比较粗略,详细查看这个文档

使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章