青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

不會飛的鳥

2010年12月10日 ... 不鳥他們!!! 我要用自己開發的分布式文件系統、分布式調度系統、分布式檢索系統, 做自己的搜索引擎!!!大魚有大志!!! ---楊書童

實戰Makefile.am

實戰Makefile.am

Makefile.am是一種比Makefile更高層次的規則。只需指定要生成什么目標,它由什么源文件生成,要安裝到什么目錄等構成。

表一列出了可執行文件、靜態庫、頭文件和數據文件,四種書寫Makefile.am文件個一般格式。


表 1Makefile.am一般格式


 

對于可執行文件和靜態庫類型,如果只想編譯,不想安裝到系統中,可以用noinst_PROGRAMS代替bin_PROGRAMS,noinst_LIBRARIES代替lib_LIBRARIES。

Makefile.am還提供了一些全局變量供所有的目標體使用:

表 2 Makefile.am中可用的全局變量

在Makefile.am中盡量使用相對路徑,系統預定義了兩個基本路徑:

表 3Makefile.am中可用的路徑變量

在上文中我們提到過安裝路徑,automake設置了默認的安裝路徑:

1)標準安裝路徑

默認安裝路徑為:$(prefix) = /usr/local,可以通過./configure --prefix=<new_path>的方法來覆蓋。

其它的預定義目錄還包括:bindir = $(prefix)/bin, libdir = $(prefix)/lib, datadir = $(prefix)/share, sysconfdir = $(prefix)/etc等等。

2) 定義一個新的安裝路徑

比如test, 可定義testdir = $(prefix)/test, 然后test_DATA =test1 test2,則test1,test2會作為數據文件安裝到$(prefix)/ /test目錄下。

我們首先需要在工程頂層目錄下(即project/)創建一個Makefile.am來指明包含的子目錄:

SUBDIRS=src/lib src/ModuleA/apple/shell src/ModuleA/apple/core

CURRENTPATH=$(shell /bin/pwd)

INCLUDES=-I$(CURRENTPATH)/src/include -I$(CURRENTPATH)/src/ModuleA/apple/include

export INCLUDES

由于每個源文件都會用到相同的頭文件,所以我們在最頂層的Makefile.am中包含了編譯源文件時所用到的頭文件,并導出,見藍色部分代碼。

我們將lib目錄下的swap.c文件編譯成libswap.a文件,被apple/shell/apple.c文件調用,那么lib目錄下的Makefile.am如下所示:

noinst_LIBRARIES=libswap.a

libswap_a_SOURCES=swap.c

INCLUDES=-I$(top_srcdir)/src/includ

細心的讀者可能就會問:怎么表1中給出的是bin_LIBRARIES,而這里是noinst_LIBRARIES?這是因為如果只想編譯,而不想安裝到系統中,就用noinst_LIBRARIES代替bin_LIBRARIES,對于可執行文件就用noinst_PROGRAMS代替bin_PROGRAMS。對于安裝的情況,庫將會安裝到$(prefix)/lib目錄下,可執行文件將會安裝到${prefix}/bin。如果想安裝該庫,則Makefile.am示例如下:

bin_LIBRARIES=libswap.a

libswap_a_SOURCES=swap.c

INCLUDES=-I$(top_srcdir)/src/include

swapincludedir=$(includedir)/swap

swapinclude_HEADERS=$(top_srcdir)/src/include/swap.h

最后兩行的意思是將swap.h安裝到${prefix}/include /swap目錄下。

接下來,對于可執行文件類型的情況,我們將討論如何寫Makefile.am?對于編譯apple/core目錄下的文件,我們寫成的Makefile.am如下所示:

noinst_PROGRAMS=test

test_SOURCES=test.c

test_LDADD=$(top_srcdir)/src/ModuleA/apple/shell/apple.o $(top_srcdir)/src/lib/libswap.a

test_LDFLAGS=-D_GNU_SOURCE

DEFS+=-D_GNU_SOURCE

#LIBS=-lpthread

由于我們的test.c文件在鏈接時,需要apple.o和libswap.a文件,所以我們需要在test_LDADD中包含這兩個文件。對于Linux下的信號量/讀寫鎖文件進行編譯,需要在編譯選項中指明-D_GNU_SOURCE。所以在test_LDFLAGS中指明。而test_LDFLAGS只是鏈接時的選項,編譯時同樣需要指明該選項,所以需要DEFS來指明編譯選項,由于DEFS已經有初始值,所以這里用+=的形式指明。從這里可以看出,Makefile.am中的語法與Makefile的語法一致,也可以采用條件表達式。如果你的程序還包含其他的庫,除了用AC_CHECK_LIB宏來指明外,還可以用LIBS來指明。

如果你只想編譯某一個文件,那么Makefile.am如何寫呢?這個文件也很簡單,寫法跟可執行文件的差不多,如下例所示:

noinst_PROGRAMS=apple

apple_SOURCES=apple.c

DEFS+=-D_GNU_SOURCE

我們這里只是欺騙automake,假裝要生成apple文件,讓它為我們生成依賴關系和執行命令。所以當你運行完automake命令后,然后修改apple/shell/下的Makefile.in文件,直接將LINK語句刪除,即:

…….

clean-noinstPROGRAMS:

    -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)

apple$(EXEEXT): $(apple_OBJECTS) $(apple_DEPENDENCIES)

    @rm -f apple$(EXEEXT)

#$(LINK) $(apple_LDFLAGS) $(apple_OBJECTS) $(apple_LDADD) $(LIBS)

…….

posted on 2009-06-21 16:19 不會飛的鳥 閱讀(897) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品欧美经典| 欧美韩国一区| 美女诱惑一区| 亚洲免费中文字幕| 欧美国产日韩在线| 伊人成年综合电影网| 免费不卡在线观看| 欧美亚洲免费在线| 中文亚洲免费| 亚洲国产一区二区视频| 欧美亚洲综合在线| 一区二区三区精密机械公司| 在线不卡中文字幕播放| 久久亚洲一区二区| 亚洲欧美日韩一区二区三区在线 | 久久人体大胆视频| 亚洲制服av| 99精品国产热久久91蜜凸| 最新中文字幕一区二区三区| 亚洲视频国产视频| 中日韩午夜理伦电影免费| 亚洲国产精品免费| 久久久噜噜噜久噜久久| 国产精品99久久99久久久二8| 亚洲欧洲综合| 日韩午夜av电影| 制服丝袜激情欧洲亚洲| 在线性视频日韩欧美| 一区二区三区精品| 亚洲综合激情| 久久先锋资源| 欧美日韩亚洲高清一区二区| 欧美日韩伦理在线| 国产精品女同互慰在线看| 国产日韩欧美一区| 揄拍成人国产精品视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲高清不卡一区| 91久久精品日日躁夜夜躁欧美| 亚洲三级国产| 一区二区激情视频| 欧美一区二区三区男人的天堂 | 欧美国产一区在线| 久久色在线播放| 亚洲人成在线观看网站高清| 午夜视频一区二区| 欧美大色视频| 狠狠入ady亚洲精品经典电影| 激情视频一区| 亚洲欧美日韩国产成人| 欧美国内亚洲| 亚洲欧美日本伦理| 欧美国内亚洲| 激情av一区二区| 欧美视频在线播放| 激情亚洲一区二区三区四区| 99日韩精品| 男同欧美伦乱| 亚洲影院免费| 欧美日韩精品免费 | 欧美久久久久久久久| 国产欧美一区二区三区久久人妖 | 国产精品你懂的在线欣赏| 亚洲精品久久7777| 欧美激情久久久| 久久精品视频一| 亚洲精品在线观| 99在线精品观看| 99这里只有精品| 国产欧美一区二区精品性| 久久一区亚洲| 欧美日韩一区国产| 久久久欧美精品| 欧美日韩aaaaa| 久久黄色级2电影| 亚洲国产欧美一区二区三区同亚洲| 久久成人精品视频| 亚洲午夜av| 每日更新成人在线视频| 一区二区三区色| 欧美成人免费在线视频| 欧美综合激情网| 欧美另类亚洲| 亚洲一区免费观看| 亚洲免费在线| 中文一区二区在线观看| 在线看视频不卡| 欧美一区成人| 亚洲一区二区三区精品在线观看| 久久国产精品一区二区三区四区| 中文有码久久| 欧美激情精品久久久久| 久久亚洲视频| 国产亚洲成人一区| 亚洲视频成人| 国产精品久久久久9999吃药| 午夜亚洲性色福利视频| 欧美成人综合在线| 亚洲电影免费观看高清| 国产一区欧美| 久久激情五月婷婷| 久久亚洲精品一区| 亚洲第一区在线| 嫩草伊人久久精品少妇av杨幂| 美女网站久久| 亚洲激情电影在线| 欧美日韩国产欧| 在线亚洲观看| 久久精品国产清自在天天线| 韩日在线一区| 欧美韩日一区| 亚洲欧美一级二级三级| 久久精品二区三区| 伊人久久亚洲影院| 欧美寡妇偷汉性猛交| 一本色道久久综合亚洲精品不| 午夜国产精品视频| 狠狠色丁香久久婷婷综合_中| 免费在线视频一区| 亚洲视频专区在线| 欧美成人一区二区| 亚洲欧美电影在线观看| 激情综合视频| 欧美特黄一区| 久久综合精品国产一区二区三区| 亚洲人成欧美中文字幕| 久久都是精品| 正在播放日韩| 伊人久久婷婷| 国产精品亚洲视频| 欧美.www| 亚洲欧美一区二区在线观看| 亚洲黄色成人网| 久色婷婷小香蕉久久| 亚洲欧美激情一区| 亚洲精品乱码久久久久久黑人 | 这里只有精品视频| 在线观看中文字幕不卡| 国产精品一区2区| 欧美香蕉视频| 欧美日韩国产一中文字不卡| 久久美女性网| 久久视频这里只有精品| 欧美一区二区| 欧美主播一区二区三区| 久久国产成人| 亚洲少妇一区| 在线视频欧美日韩精品| 日韩一级黄色av| 日韩午夜免费视频| 日韩亚洲不卡在线| 日韩视频在线一区二区| 亚洲另类视频| 亚洲视频在线观看视频| 亚洲午夜在线视频| 亚洲免费在线| 久久婷婷麻豆| 亚洲福利视频在线| 亚洲精品国产拍免费91在线| 亚洲激情网站免费观看| 一区二区激情视频| 香港久久久电影| 久久亚洲精品网站| 欧美日韩www| 国产精品黄色| 亚洲丰满在线| 在线视频日韩精品| 欧美在线免费视屏| 欧美肥婆在线| 亚洲淫性视频| 久久午夜视频| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品入口| 亚洲国产一区二区a毛片| 一区二区三区视频在线| 欧美中在线观看| 91久久精品久久国产性色也91| 一本色道久久综合一区| 久久久精彩视频| 国产精品a级| 亚洲全部视频| 久久精品中文字幕免费mv| 国产女精品视频网站免费| 欧美日韩精品一区二区天天拍小说 | 欧美韩日一区二区| 国产日韩欧美一区二区| 亚洲最新视频在线| 老色批av在线精品| 99亚洲一区二区| 欧美mv日韩mv亚洲| 狠狠色狠狠色综合日日五| 午夜精品在线观看| 日韩一级在线观看| 嫩模写真一区二区三区三州| 国内精品免费午夜毛片| 亚洲一区二区精品在线| 亚洲乱码日产精品bd| 欧美极品aⅴ影院| 欧美视频精品在线观看| 激情久久中文字幕|