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

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Makefile中使用隱含規則來編譯程序

Posted on 2010-02-05 15:51 Prayer 閱讀(692) 評論(0)  編輯 收藏 引用 所屬分類: Shell
Makefile中使用隱含規則來編譯程序

本示例演示一個程序的生成過程,使用的程序文件為第4章中的文件。Makefile文件和程序文件在一個文件夾中。Makefile文件如下所示:

CC     := gcc
HEAD   := getarg.h
SRC    := getarg.c writeinfo.o main.c
OBJS   := getarg.o writeinfo.o main.o
TT     := test
Files := $(wildcard ./*)
INC = .
CFLAGS  = -pipe -g -Wall -I$(INC)
LDFLAGS = -Wall -g
all:$(TT)

$(TT):$(OBJS)
@echo "+++++++ Build Standalone Programe : $@ +++++++"
$(CC) $(LDFLAGS) $(OBJS)  -o $@

libtest_d.so:getarg.o writeinfo.o
@echo "+++++++ Build Dynamic lib : $@ +++++++"
$(CC) -shared $(LDFLAGS) getarg.o writeinfo.o -o $@
test_dlib:libtest_d.so main.o
@echo "+++++++ Build Exe by Dynamic lib : $@ +++++++"
$(CC) $(LDFLAGS) main.o -L. -ltest_d -o $@
filelist:
@echo "<<<<<<< Files in this folder >>>>>>"
@file $(Files)
.PHONY : clean filelist 
%.o:%c
$(CC) $(CFLAGS) -c $<  -o $@
clean:
@echo "------- clean ------"  
rm -f *.o
rm -f $(TT)
rm -f libtest_d.so
rm -f test_dlib

在本例中,定義了CC等變量,在變量引用和使用這些變量的時候,需要用$(CC)的形式。

在Makefile和源文件所在目錄中,在命令行執行make命令:

$ make
            
執行的結果如下所示:
gcc -pipe -g -Wall -I.   -c -o getarg.o getarg.c
gcc -pipe -g -Wall -I.   -c -o writeinfo.o writeinfo.c
gcc -pipe -g -Wall -I.   -c -o main.o main.c
+++++++ Build Standalone Programe : test +++++++
gcc -Wall -g getarg.o writeinfo.o main.o  -o test

在執行的過程中,默認執行all目標,由于all目標依賴于變量$(TT),$(TT)實際上是test。$(TT)依賴于$(OBJS),$(OBJS)就是getarg.o writeinfo.o main.o。因此,需要產生這三個目標文件。

上述make工作的處理過程是這樣的:首先尋找三個目標文件(getarg.o,writeinfo.o和main.o)的生成規則。在所有的規則中,并沒有這三個目標文件的生成規則,因此使用默認的目標%.o:%c中的規則生成這三個目標文件。這個時候會使用gcc編譯生成這三個目標文件。生成完三個目標文件之后,將執行test目標,進行目標文件的連接。

事實上,上述執行過程中只是直接執行了all目標,在Makefile中還有libtest_d.so、test_dlib和filelist幾個目標沒有執行,而這些目標可以單獨執行。

執行單獨的目標filelist:

$ make filelist
            
顯示的結果如下:
<<<<<<< Files in this folder >>>>>>
./getarg.c:       ASCII C program text
./getarg.h:       ASCII text
./getarg.o:       ELF 32-bit LSB relocatable, Intel
80386, version 1 (SYSV), not stripped
./main.c:        ASCII C program text
./main.o:        ELF 32-bit LSB relocatable, Intel
80386, version 1 (SYSV), not stripped
./Makefile:      ASCII make commands text
./test:          ELF 32-bit LSB executable, Intel
80386, version 1 (SYSV), for GNU/Linux 2.6.4,
dynamically linked (uses shared libs),
for GNU/Linux 2.6.4, not stripped
./writeinfo.c:        ASCII C program text
./writeinfo.h:        ASCII text
./writeinfo.o:        ELF 32-bit LSB relocatable,
Intel 80386, version 1 (SYSV), not stripped

這條目標執行的命令是使用file命令查看本文件夾下所有的文件。其中,Files := $(wildcard ./*)表示使用通配符尋找目錄下的所有文件。

執行生成可執行程序test_dlib的命令:

$ make test_dlib
            
執行的結果如下所示:
+++++++ Build Dynamic lib : libtest_d.so +++++++
gcc -shared -Wall -g getarg.o writeinfo.o -o libtest_d.so
+++++++ Build Exe by Dynamic lib : test_dlib +++++++
gcc -Wall -g main.o -L. -ltest_d -o test_dlib

test_dlib目標是一個可執行程序,它本身需要連接一個動態庫libtest_d.so,因此它依賴于目標libtest_d.so和main.o目標,由于main.o已經生成,這樣還需要生成libtest_d.so目標。在libtest_d.so目標中,依賴的文件getarg.o和writeinfo.o都已經生成了,因此直接生成這個動態庫即可。libtest_d.so生成后,再生成test_dlib可執行程序。

在以上的示例中的test和test_dlib都是可執行的程序,它們的區別在于前者包含了三個目標文件,可以直接執行,后者只包括了main.o一個目標文件,它的執行必須依賴動態庫。

繼續使用clean清除目標:

$ make clean
執行的結果如下所示:
------- clean ------
rm -f *.o
rm -f test
rm -f libtest_d.so
rm -f test_dlib
在清除目標之后,生成test_dlib可執行程序:
$ make test_dlib
gcc -pipe -g -Wall -I.   -c -o getarg.o getarg.c
gcc -pipe -g -Wall -I.   -c -o writeinfo.o writeinfo.c
+++++++ Build Dynamic lib : libtest_d.so +++++++
gcc -shared -Wall -g getarg.o writeinfo.o -o libtest_d.so
gcc -pipe -g -Wall -I.   -c -o main.o main.c
+++++++ Build Exe by Dynamic lib : test_dlib +++++++
gcc -Wall -g main.o -L. -ltest_d -o test_dlib

在這次執行的過程中,由于getarg.o,writeinfo.o和main.o三個目標文件還沒有生成,因此在生成庫libtest_d.so之前,需要先編譯生成getarg.o和writeinfo.o兩個目標,它們使用的是默認的規則。在libtest_d.so生成后,還需要生成main.o的過程,它也需要使用默認的規則。

知識點:通常情況下,為了加速開發,程序員自己編寫的程序在無特殊要求下都可以使用隱含規則,這樣還可以防止因為Makefile編寫錯誤而導致程序運行錯誤。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩精品免费看| 99精品99| 亚洲精品婷婷| 久久三级视频| 午夜日韩福利| 一区二区三区日韩欧美| 99在线|亚洲一区二区| 亚洲乱码国产乱码精品精98午夜 | 亚洲免费av电影| 国内精品国语自产拍在线观看| 国产精品美女久久久久av超清 | 欧美日韩在线高清| 欧美成人免费网站| 美女黄色成人网| 久久伊伊香蕉| 亚洲综合电影一区二区三区| 亚洲精品欧美| 亚洲国产精品久久| 性欧美video另类hd性玩具| 久久久久一本一区二区青青蜜月| 亚洲欧洲日韩综合二区| 亚洲第一页自拍| 亚洲国产高清在线| 日韩亚洲国产精品| 午夜精品网站| 久久综合一区二区三区| 亚洲国内精品在线| 中国成人亚色综合网站| 欧美一区精品| 欧美精品自拍偷拍动漫精品| 国产精品美女久久久浪潮软件| 国产曰批免费观看久久久| 影音先锋日韩资源| 亚洲欧美日韩精品久久久久| 欧美jizz19hd性欧美| 亚洲网友自拍| 欧美理论在线播放| 国模大胆一区二区三区| 亚洲一区二区三区四区五区黄| 欧美xart系列高清| 亚洲欧美一区二区三区久久| 欧美理论电影网| 91久久精品日日躁夜夜躁欧美| 久久精品官网| 亚洲天堂免费在线观看视频| 欧美精品91| 91久久亚洲| 亚洲电影免费在线观看| 久久一二三区| 亚洲国产精品va| 免费成人av在线看| 久久久久久日产精品| 韩国一区二区三区美女美女秀| 欧美一区二区三区免费在线看| 中文精品视频| 国产精品国产三级国产普通话99| 一本大道久久精品懂色aⅴ| 亚洲国产精品福利| 欧美国产视频在线观看| 欧美日韩成人综合| 欧美成人一区二区三区片免费| 国产综合视频| 久久久久久亚洲精品中文字幕| 亚洲欧美欧美一区二区三区| 国产精品色一区二区三区| 亚洲一级片在线看| 亚洲视频网在线直播| 亚洲图片在线| 在线综合欧美| 99精品国产99久久久久久福利| 欧美精品综合| 亚洲午夜影视影院在线观看| 一本到高清视频免费精品| 国产精品成人aaaaa网站| 亚洲综合日韩中文字幕v在线| 亚洲一区二区网站| 国产一区二区三区奇米久涩 | 亚洲高清在线播放| 欧美sm重口味系列视频在线观看| 亚洲精品国产精品乱码不99按摩 | 久久久免费精品视频| 久久大逼视频| 亚洲日韩视频| 91久久极品少妇xxxxⅹ软件| 欧美日韩免费观看一区=区三区| 亚洲视频一区二区| 亚洲欧美99| 亚洲第一区中文99精品| 亚洲人体一区| 国产精品日韩一区| 久久精品主播| 久久综合图片| 在线视频精品一| 亚洲一区二区三区四区五区午夜| 狠狠色丁香婷婷综合久久片| 欧美成人免费全部| 国产精品久久久久久久久动漫| 欧美中文字幕在线视频| 麻豆av福利av久久av| 亚洲女女女同性video| 欧美综合77777色婷婷| 亚洲美女福利视频网站| 亚洲一区二区三区免费在线观看 | 亚洲欧美成人综合| 久久精品国产欧美亚洲人人爽| 日韩一级在线观看| 新67194成人永久网站| 亚洲精品专区| 久久精品视频va| 一区二区三区你懂的| 久久精品91| 一区二区精品在线观看| 久久精品中文字幕免费mv| 中日韩视频在线观看| 久久婷婷成人综合色| 欧美一二三区精品| 欧美激情国产日韩| 美女国产一区| 国产农村妇女精品一区二区| 夜色激情一区二区| 亚洲欧洲一区二区在线观看| 亚洲欧美99| 亚洲一区亚洲| 欧美人成在线视频| 欧美高清视频| 国产在线观看91精品一区| 亚洲午夜羞羞片| 午夜激情综合网| 蜜桃av噜噜一区二区三区| 久久精品国产亚洲一区二区三区| 欧美日韩国产一区二区三区地区 | 亚洲精品国产精品国自产在线| 一区在线免费| 欧美一区二区精品| 亚洲欧美另类在线| 国产精品久久| 亚洲视频导航| 亚洲女性裸体视频| 欧美日韩一区二区三区在线观看免 | 99精品99久久久久久宅男| 亚洲精品无人区| 欧美韩日亚洲| 欧美成人精品在线播放| 黄色成人片子| 免费不卡中文字幕视频| 亚洲成人在线视频播放| 国产伦精品一区二区三区高清| 亚洲视频专区在线| 香港久久久电影| 国产欧美日韩三区| 久久久精品国产免费观看同学| 久久久五月婷婷| 在线日韩欧美视频| 久久综合九色九九| 欧美国产精品专区| 亚洲一区在线看| 国产日韩欧美三区| 久久久美女艺术照精彩视频福利播放| 欧美成人dvd在线视频| 亚洲毛片在线观看| 国产欧美在线播放| 久久综合狠狠综合久久综青草| 欧美激情国产日韩| 亚洲人成艺术| 国产精品午夜国产小视频| 久久精品1区| 欧美顶级大胆免费视频| 亚洲调教视频在线观看| 国产日韩欧美在线一区| 欧美大片91| 校园春色综合网| 亚洲人成人一区二区三区| 亚洲欧美日韩精品| 亚洲国产日韩美| 国产精品欧美风情| 欧美高清视频在线观看| 性一交一乱一区二区洋洋av| 91久久精品一区| 久久久久久一区二区| 一二三区精品| 亚洲高清资源| 国产一区二区久久| 国产精品福利影院| 欧美精品一区二区久久婷婷| 欧美在线播放视频| 亚洲一区二区三区三| 日韩视频在线观看免费| 欧美黑人多人双交| 久久久久久久综合| 亚洲综合大片69999| 99国产精品国产精品毛片| 在线观看日产精品| 国产在线欧美日韩| 国产美女扒开尿口久久久| 欧美日韩高清在线播放| 久久久精品午夜少妇| 狠狠网亚洲精品| 国产精品永久免费在线| 欧美日韩在线观看视频| 欧美日本高清一区|