概念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