automake编译工程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuweigangzwg/article/details/77480807

automake编译工程

首先准备工程完整清晰的目录,cd到要生成makefile的主目录,下面将分布说明怎样用automake编译工程,所有的1,2,3,4,5,6都是在主目录操作的。


1 输入:“autoscan” 生成configure.scan
2 输入:“mv configure.scan configure.ac”
3 输入:“vi configure.ac” 

添加:AM_INIT_AUTOMAKE(hello,1.0)

           AC_CONFIG_FILES([Makefile])

并添加
  AC_PROG_RANLIB
//有sub目录时记得都写出来 :例如只有一个文件夹Source,则:Makefile source/Makefile 上面不用更改只添加这两处。
//有源码的目录都要写下来,在有源码的地方都要写Makefile.am。
//如果有子目录,必须是在主目录的子目录里面写Makefile.am,不能是主目录的上层目录写Makefile.am否则会失败。

例如:
AC_PREREQ([2.63])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([Zlog.h])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(zlog,1.0)
AC_CONFIG_FILES([Makefile
                                  source/Makefile])
(当生成.a文件时需要加上:AC_PROG_RANLIB)
AC_PROG_CXX
AC_PROG_CC
AC_PROG_RANLIB

4 输入:“aclocal“ 生成 aclocl.m4
5 输入:”autoconf“ 生成 configure
6 输入:vim Makefile.am

在主目录中:SUBDIRS = source(如果没有子目录则在主目录编写子目录内容)

SUBDIRS = src/handle_module/transcode src/handle_module/cover_standard src/heartbeat

在子目录中如source中或其他,举几个例子


//生成publicparty.a(这个是个公共库,不在主目录子目录的框架中,是个独立的makefile.am,和其他makefile.am无关)。

AM_CPPFLAGS = -I ./publicparty

AUTOMAKE_OPTIONS = foreign
CXXFLAGS += -g -Wall -lpthread

lib_LIBRARIES = libpublicparty.a

libpublicparty_a_SOURCES = lvsm_datatime.cpp \
                           lvsm_conf.cpp \
                           lvsm_file.cpp \
                           lvsm_log.cpp \
                           lvsm_socket.cpp \
                           lvsm_socketpair.cpp \
                           lvsm_tcp.cpp \
                           lvsm_udp.cpp \
                           lvsm_thread.cpp \
                           lvsm_public_extend.cpp

include_HEADERS = lvsm_info.h \
                  lvsm_datatime.h \
                  lvsm_conf.h \
                  lvsm_file.h \
                  lvsm_log.h \
                  lvsm_socket.h \
                  lvsm_socketpair.h \
                  lvsm_tcp.h \
                  lvsm_udp.h \
                  lvsm_thread.h \
                  lvsm_public_extend.h

all-am:
	@echo -e "\\e[32m"      
	@echo "build lvsm:libpublicparty.a success."      
	@echo -e "\\e[0m"


//生成libtranscode.a

AM_CPPFLAGS = -I ../../../../publicparty -I ./transcode
LD_ADD = ../../../../publicparty/libpublicparty.a 

AUTOMAKE_OPTIONS = foreign
CXXFLAGS += -g -Wall -lpthread

lib_LIBRARIES = libtranscode.a
 
libtranscode_a_SOURCES = lvsm_transcode.cpp

include_HEADERS = lvsm_transcode.h
libtranscode_a_LIBADD = ${LD_ADD}

all-am:
	@echo -e "\\e[32m"      
	@echo "build lvsm:libtranscode.a success."      
	@echo -e "\\e[0m"

//生成libcoverstandard.a

AM_CPPFLAGS = -I ../../../../publicparty -I ./cover_standard
LD_ADD = ../../../../publicparty/libpublicparty.a

AUTOMAKE_OPTIONS = foreign
CXXFLAGS += -g -Wall -lpthread

lib_LIBRARIES = libcoverstandard.a
 
libcoverstandard_a_SOURCES = lvsm_cover_standard.cpp

include_HEADERS = lvsm_cover_standard.h
libcoverstandard_a_LIBADD = ${LD_ADD}

all-am:
	@echo -e "\\e[32m"      
	@echo "build lvsm:libcoverstandard.a success."      
	@echo -e "\\e[0m"

//生成可执行程序lvsmbeatheart

AM_CPPFLAGS = -I ../../../publicparty -I ../handle_module/cover_standard -I ../handle_module/transcode -I ./heartbeat
LD_ADD = ../../../publicparty/libpublicparty.a \
	 ../handle_module/cover_standard/libcoverstandard.a \
	 ../handle_module/transcode/libtranscode.a \
         -lrt 

AUTOMAKE_OPTIONS = foreign
CXXFLAGS += -g -Wall -lpthread
bin_PROGRAMS = lvsmbeatheart

lvsmbeatheart_SOURCES = lvsm_heartbeat.cpp \
                        main.cpp
include_HEADERS = lvsm_heartbeat.h
lvsmbeatheart_LDADD = ${LD_ADD}

all-am:
	@echo -e "\\e[32m"      
	@echo "build lvsm:lvsmbeatheart success."      
	@echo -e "\\e[0m"

7 输入:"autoheader" 生成 config.h.in
8 输入:"automake --add-missing" 生成 Makefile.in
9:输入:"./configure --prefix="要生成的可执行程序绝对目录名称""
有时会产生:
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found


则输入“touch NEWS README AUTHORS ChangeLog”

//总结
1)修改Makefile.am文件
2) 修改configure.ac文件,运行autoconf生成configure文件(它是由aclocal.m4与configure.ac生成的, aclocal.m4是由configure.ac运行aclocal生成的)
3)运行autoheader生成config.h.in。
4)运行automake --add-missing生成Makefile.in,Makefile.in是由automake在Makefile.am基础上生成的。
5) 运行./configure生成Makefile, config.h, Makefile是由configure 在Makefile.in上生成的, config.h是由config.h.in生成的

autoreconf -fi:当Makefile.am改变时 然后./configure


 
 

如有错误请指正:

交流请加QQ群:62054820
QQ:379969650.



猜你喜欢

转载自blog.csdn.net/zhuweigangzwg/article/details/77480807