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
1. 首先运行autoscan,这之后会生成一个configure.scan文件,修改为configure.in,并编辑。典型的一个文件如下, AC_CONFIG_SRCDIR,AC_CONFIG_HEADER这两项还不知道干什么用的,如果不注释掉后面automake会出现错误,那就先注释掉吧。 重点修改AC_INIT,AC_INIT_AUTOMAKE。AC_CHECK那些不用管,后面提示-lglui提示要注意,这是需要链接的库文件,这里链接glui这个库。
2. 编写Makefile.am,如下面这样。和makefile一样,写上可执行文件依赖于的源文件,_LDADD是要链接的库文件名。# -*- 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' with a function in `-lglui': AC_CHECK_LIB([glui], [main]) # FIXME: Replace `main' 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)
3. 然后执行aclocal,和autoconf,最后automake —add-missing 生成configure文件。这就完成了,下面就是unix下编译安装软件的三个步骤了, ./configure,make,makeinstall等。 写得比较粗略,详细查看这个文档。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