Makefile.am編寫規則


概念

    Makefile.am是比Makefile更高層次的規則只需要指定要生成什么目標,依賴於什么文件,和要安裝到什么目錄。automake會根據Makefile.am來自動生成Makefile.in 。Makefile.am里邊使用的都是宏,常見的有

.PROGRAMS ;表示可執行文件

.LIBRARIES ;表示庫文件

.LTLIBRARIES ;表示庫文件,LT表示libtool

.HEADERS ;頭文件

.DATA ;數據文件

1、編譯可執行文件

#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 鏈接時所需要的庫文件,這里表示需要兩個庫文件的支持

 2、編譯動態庫文件

      要生成xxx.so文件

#Makefile.am文件
xxxlibdir=$(libdir)//新建一個目錄,該目錄就是lib目錄,運行后xxx.so將安裝在該目錄下 xxxlib_PROGRAMS=xxx.so xxx_so_SOURCES=xxx.c xxx_so_LDFLAGS=-shared -fpic //GCC編譯動態庫的選項

3、編譯靜態庫文件

     要生成xxx.a

#Makefile.am文件
noinst_LTLIBRARIES = xxx.a noinst_HEADERS = a.h b.h xxx_a_SOURCES = a.c b.c xxx.c


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM