Makefile.am编写规则

概念session

    Makefile.am是比Makefile更高层次的规则只须要指定要生成什么目标,依赖于什么文件,和要安装到什么目录。automake会根据Makefile.am来自动生成Makefile.in 。Makefile.am里边使用的都是宏,常见的有memcached

.PROGRAMS ;表示可执行文件ui

.LIBRARIES ;表示库文件spa

.LTLIBRARIES ;表示库文件,LT表示libtoolcode

.HEADERS ;头文件blog

.DATA ;数据文件编译器

一、编译可执行文件io

#Makefile.am文件
bin_PROGRAMS = xxx #bin_PROGRAMS 表示指定要生成的可执行应用程序文件,这表示可执行文件在安装时须要被安装到系统
#中;若是只是想编译,不想被安装到系统中,能够用noinst_PROGRAMS来代替
xxx_SOURCES
= a.c b.c c.c main.c d.c xxx.c
#xxx_SOURCES表示生成可执行应用程序所用的源文件,这里注意,xxx_是由前面的bin_PROGRAMS
#指定的,若是前面是生成example,那么这里就是example_SOURCES,其它的相似标识也是同样
xxx_CPPFLAGS
= -DCONFIG_DIR=\"$(sysconfdir)\" -DLIBRARY_DIR=\"$(pkglibdir)\"
#xxx_CPPFLAGS 这和Makefile文件中同样,表示C语言预处理参数,这里指定了DCONFIG_DIR,之后
#在程序中,就能够直接使用CONFIG_DIR。不要把这个和另外一个CFLAGS混淆,后者表示编译器参数

xxx_LDFLAGS = -export-dynamic -lmemcached
#xxx_LDFLAGS 链接的时候所需库文件的标识,这个也就是对应一些如-l,-shared等选项
noinst_HEADERS
= xxx.h #这个表示该头文件只是参加可执行文件的编译,而不用安装到安装目录下。若是须要安装到系统中,
#能够用include_HEADERS来代替
INCLUDES
= -I/usr/local/libmemcached/include/ #INCLUDES 连接时所须要的头文件
xxx_LDADD
= $(top_builddir)/sx/libsession.a \ $(top_builddir)/util/libutil.a
#xxx_LDADD 连接时所须要的库文件,这里表示须要两个库文件的支持

 二、编译动态库文件编译

      要生成xxx.so文件class

#Makefile.am文件
xxxlibdir=$(libdir)//新建一个目录,该目录就是lib目录,运行后xxx.so将安装在该目录下 xxxlib_PROGRAMS=xxx.so xxx_so_SOURCES=xxx.c xxx_so_LDFLAGS=-shared -fpic //GCC编译动态库的选项

三、编译静态库文件

     要生成xxx.a

#Makefile.am文件
noinst_LTLIBRARIES = xxx.a noinst_HEADERS = a.h b.h xxx_a_SOURCES = a.c b.c xxx.c
相关文章
相关标签/搜索