欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Makefile 速成

from http://blog.csdn.net/abcjennifer/article/details/46390309
makefile由規則組成,每條規則告訴make兩件事: 文件的依賴(lài)關(guān)系 & 如何生成目標文件。
e.g 
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
# 定義變量, 反斜杠(\)是換行符的意思。


edit : $(objects)
# targets : prerequisites 冒號前表示目標文件, 冒號后為依賴(lài)文件(prerequisites)
cc -o edit $(objects)
# 編譯命令, 每個(gè)target下都需要配一行command(使用了隱晦規則除外)




main.o : defs.h
# 本來(lái)是main.o: main.c defs.h, 根據make 的“隱晦規則”可以省略main.c,只列出其所需的頭文件
# 根據make 的“隱晦規則”隱含了cc -c main.c
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h


.PHONY : clean 
#.PHONY 意思表示 clean 是一個(gè)“偽目標”, 我們并不生成“clean”這個(gè)文件。 #可以用“make clean”運行“clean”這個(gè)目標。
clean :
rm edit $(objects) 




二. make的工作方式:
1、讀入所有的 Makefile。
2、讀入被 include 的其它 Makefile。
3、初始化文件中的變量。
4、推導隱晦規則,并分析所有規則。
5、為所有的目標文件創(chuàng )建依賴(lài)關(guān)系鏈。
6、根據依賴(lài)關(guān)系和文件生成時(shí)間,決定哪些目標要重新生成。
7、執行生成命令。 




三、makefile中的常用自動(dòng)化變量與通配符:
makefile中支持的3個(gè)通配符: *,?,[...]
$@: 目標集
$<: 第一個(gè)依賴(lài)文件
$^: 所有依賴(lài)文件
$?: 所有比目標新的依賴(lài)集合


objects = *.o
objects := $(wildcard *.o)




四、自動(dòng)生成依賴(lài)性關(guān)系
在Makefile中如果要對每個(gè)文件編寫(xiě)依賴(lài)關(guān)系會(huì )非常麻煩, 為了避免這個(gè)過(guò)程, 我們可以用c/c++編譯器的"-M"功能, 即自動(dòng)尋找源文件中包含的頭文件, 并生成依賴(lài)關(guān)系。 
如 cc -M Main.c 的輸出是 main.o: main.c defs.h
PS:GNU的編譯器(gcc/g++)需要用-MM參數, 如gcc -MM main.c, 不然"-M"會(huì )把一些標準庫的頭文件也引進(jìn)來(lái)。


這部分內容我們就不詳細講了,因為在CoMake2中已經(jīng)有了更好的集成。




五、 調用命令
1. 顯示命令
@echo running...
這在調試整個(gè)make流程時(shí)很有用, 可以用make -n 或make --just-print之顯示命令,但不執行命令。 也就是可以看到我們寫(xiě)的makefile真正執行起來(lái)的順序流程。


2. 命令出錯
忽略錯誤繼續執行: make -k 或 make b--keep-going
全局忽略錯誤: make -i 或 make --ignore-errors
某一句忽略錯誤: 在前面加一個(gè)減號, 如-rm -f *.o


3. 命令執行
exec:
cd subdir; export variable=value;\ %將變量value以"variable"傳遞到subdir, 如果傳遞所有變量, 只需一個(gè)export就行
$(MAKE);\ % 嵌套執行make;
mkdir subsubdir


PS:make -w 可以查看當前工作目錄






六、 變量
1. 變量定義:
大小寫(xiě)敏感
不許含有:,#,=,空格
變量聲明時(shí)需要賦值,
用=幅值不一定是用已經(jīng)幅好值的變量,也可以引用后面定義的變量;
用:=幅值, 只能引用已經(jīng)幅值過(guò)的變量進(jìn)行幅值; 
賦值運算符A?=B表示, 若A被定義過(guò),則不做,否則A賦值為B;
A+=B表示,變量幅值時(shí)字符串的追加;


2. 變量引用:
$(var)


3. 變量替換:
foo:= a.o b.o c.o
希望賦值bar為a.c, b.c, c.c, 有兩種方法:
方法一: bar := $(foo:.o=.c)#將foo中所有以.o結尾的".o"字串全替換為".c"
方法二: bar := $(foo:%.o=%.c)










七、 條件判斷
語(yǔ)法: 
libs_for_gcc = -lgnu
ifeq($(UNAME),Linux)
LINUX := 1
else ifeq($(UNAME),Darwin)
OSX := 1
endif


類(lèi)似地, 還有三個(gè)關(guān)鍵字: ifneq,ifdef和ifndef
注意,條件表達式中不要放自動(dòng)化變量, 如$@,因為自動(dòng)化變量只在運行時(shí)才有,而make在讀取Makefile時(shí)就會(huì )根據條件表達式的值選擇語(yǔ)句。




八、 常用函數
函數調用方法:
$(<function> <args>)
1. 字符串處理函數:
$(subst <from>,<to>,<text>) 將<text>中的<from>替換成<to>
$(patsubst <fromP>,<toP>,<text>) 將<text>中符合模式<fromP>的部分替換成<toP>
$(strip <text>) 去<text>中開(kāi)頭和結尾的空字符
$(findstring <find>,<from>) 在<from>中找<find>; 找到返回<find>, 否則返回空字符串
$(filter <pattern>,<text>) 從text中過(guò)濾出符合pattern模式的項
$(filter-out <pattern>,<text>) 反過(guò)濾
$(sort <list>) 排序


2. 文件名操作函數:
$(dir <text>) 取目錄
$(suffix <text>) 取后綴名
$(addsuffix <suffix>,<names>) 加后綴
$(addprefix <prefix>,<names>) 加前綴
$(join <list1>,<list2>) list1, list2對應元素進(jìn)行concatenate


3. if
$(if <condition>, <then>, <else>)


4. foreach
$(foreach <var>,<list>,<text>)


5. shell
執行shell命令
e.g $(shell find . -name '*.$(suffix_name)')






九、 常用指定make的目標功能:
all: 編譯所有目標
clean: 刪除所有被make創(chuàng )建的文件
install: 安裝已編譯好的程序, 就是將目標執行文件拷貝到指定目標中去
print: 列出改變了的源文件
tar: 把原程序打包備份為一個(gè)tar文件






參考材料: 《跟我一起寫(xiě)Makefile》
PS:其實(shí)還有別的參考,但是感覺(jué)這篇文檔已經(jīng)足夠涵蓋makefile常用內容了。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Makefile教程: 跟我一起寫(xiě)Makefile -- LearnMakefile
跟我一起寫(xiě)Makefile 3—— 書(shū)寫(xiě)規則
如何自己編寫(xiě)Makefile
makefile
C語(yǔ)言
9-1 Makefile的高級特性
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久