CatCoding

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</pre>

使用 automake 等工具

首先运行 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.
AC_CHECK_LIB([glui], [main])
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)

编写 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

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

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

公号同步更新,欢迎关注👻