Linux下C編程基礎之:make工程管理器
3.5.3makefile規(guī)則
makefile的規(guī)則是make進行處理的依據(jù),它包括了目標體、依賴文件及其之間的命令語句。在上面的例子中,都顯式地指出了makefile中的規(guī)則關系,如“$(CC)$(CFLAGS)-c$-o$@”,但為了簡化makefile的編寫,make還定義了隱式規(guī)則和模式規(guī)則,下面就分別對其進行講解。
1.隱式規(guī)則
隱含規(guī)則能夠告訴make怎樣使用傳統(tǒng)的規(guī)則完成任務,這樣,當用戶使用它們時就不必詳細指定編譯的具體細節(jié),而只需把目標文件列出即可。make會自動搜索隱式規(guī)則目錄來確定如何生成目標文件。如上例就可以寫成:
OBJS=kang.oyul.o
CC=gcc
CFLAGS=-Wall-O-g
david:$(OBJS)
$(CC)$^-o$@
為什么可以省略后兩句呢?因為make的隱式規(guī)則指出:所有“.o”文件都可自動由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-cfile.c–ofile.o”來生成。這樣“kang.o”和“yul.o”就會分別通過調用“$(CC)$(CFLAGS)-ckang.c-okang.o”和“$(CC)$(CFLAGS)-cyul.c-oyul.o”來生成。
注意 | 在隱式規(guī)則只能查找到相同文件名的不同后綴名文件,如“kang.o”文件必須由“kang.c”文件生成。 |
表3.17給出了常見的隱式規(guī)則目錄。
表3.17 makefile中常見隱式規(guī)則目錄
對應語言后綴名 | 隱式規(guī)則 |
C編譯:.c變?yōu)?o | $(CC)–c$(CPPFLAGS)$(CFLAGS) |
C++編譯:.cc或.C變?yōu)?o | $(CXX)-c$(CPPFLAGS)$(CXXFLAGS) |
Pascal編譯:.p變?yōu)?o | $(PC)-c$(PFLAGS) |
Fortran編譯:.r變?yōu)?o | $(FC)-c$(FFLAGS) |
2.模式規(guī)則
模式規(guī)則是用來定義相同處理規(guī)則的多個文件的。它不同于隱式規(guī)則,隱式規(guī)則僅僅能夠用make默認的變量來進行操作,而模式規(guī)則還能引入用戶自定義變量,為多個文件建立相同的規(guī)則,從而簡化makefile的編寫。
模式規(guī)則的格式類似于普通規(guī)則,這個規(guī)則中的相關文件前必須用“%”標明。使用模式規(guī)則修改后的makefile的編寫如下:
OBJS=kang.oyul.o
CC=gcc
CFLAGS=-Wall-O-g
david:$(OBJS)
$(CC)$^-o$@
%.o:%.c
$(CC)$(CFLAGS)-c$-o$@
3.5.4make管理器的使用
使用make管理器非常簡單,只需在make命令的后面鍵入目標名即可建立指定的目標,如果直接運行make,則建立makefile中的第一個目標。
此外make還有豐富的命令行選項,可以完成各種不同的功能。表3.18列出了常用的make命令行選項。
表3.18 make的命令行選項
命令格式 | 含義 |
-Cdir | 讀入指定目錄下的makefile |
-ffile | 讀入當前目錄下的file文件作為makefile |
-I | 忽略所有的命令執(zhí)行錯誤 |
-Idir | 指定被包含的makefile所在目錄 |
-n | 只打印要執(zhí)行的命令,但不執(zhí)行這些命令 |
-p | 顯示make變量數(shù)據(jù)庫和隱含規(guī)則 |
-s | 在執(zhí)行命令時不顯示命令 |
-w | 如果make在執(zhí)行過程中改變目錄,則打印當前目錄名 |
linux相關文章:linux教程
評論