1、makefile編程
make是一個命令,而makefile是一個文件。make命令執行時,須要一個 Makefile 文件,以告訴make命令須要怎麼樣的去編譯和連接程序。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件須要先編譯,哪些文件須要後編譯,哪些文件須要從新編譯,甚至於進行更復雜的功能操做,由於makefile就像一個Shell腳本同樣,其中也能夠執行操做系統的命令。makefile 帶來的好處就是——「自動化編譯」,一旦寫好,只須要一個make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。ide
舉例:首先創建個test1.c文件spa
創建makfile文件,對makfile文件進行編寫操作系統
注:在依賴方法那行,必定要以Tab鍵開頭
命令行
在命令行輸入make3d
make是如何工做的?
在默認的方式下,也就是咱們只輸入make命令。那麼,
一、make會在當前目錄下找名字叫「Makefile」或「makefile」的文件。
二、若是找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到「edit」這個文件,並把這個文件做爲最終的目標文件。
三、若是edit文件不存在,或是edit所依賴的後面的 .o 文件的文件修改時間要比edit這個文件新,那麼,他就會執行後面所定義的命令來生成edit這個文件。
四、若是edit所依賴的.o文件也不存在,那麼make會在當前文件中找目標爲.o文件的依賴性,若是找到則再根據那一個規則生成.o文件。(這有點像一個堆棧的過程)
五、固然,你的C文件和H文件是存在的啦,因而make會生成 .o 文件,而後再用 .o 文件生命make的終極任務,也就是執行文件edit了。
這 就是整個make的依賴性,make會一層又一層地去找文件的依賴關係,直到最終編譯出第一個目標文件。在找尋的過程當中,若是出現錯誤,好比最後被依賴的 文件找不到,那麼make就會直接退出,並報錯,而對於所定義的命令的錯誤,或是編譯不成功,make根本不理。make只管文件的依賴性,即,若是在我 找了依賴關係以後,冒號後面的文件仍是不在,那麼對不起,我就不工做啦。
經過上述分析,咱們知道,像clean這種,沒有被第一個目標文件直接或間接關聯,那麼它後面所定義的命令將不會被自動執行,不過,咱們能夠顯示要make執行。即命令——「make clean」,以此來清除全部的目標文件,以便重編譯。
因而在咱們編程中,若是這個工程已被編譯過了,當咱們修改了其中一個源文件,好比file.c,那麼根據咱們的依賴性,咱們的目標file.o會被重編譯 (也就是在這個依性關係後面所定義的命令),因而file.o的文件也是最新的啦,因而file.o的文件修改時間要比edit要新,因此edit也會被 從新連接了(詳見edit目標文件後定義的命令)。(這是博主百度的哦~)blog
上面文件內容中,「.PHONY」表示,clean是個僞目標文件。ci
在依賴關係前加@,可屏蔽細節
開發
2、進度條的簡單實現get
創建ProBar.h文件
#pragma once #include<stdio.h> #define SIZE 103 #include<unistd.h> #include<string.h> void ProBar() { int i=1; char ch[SIZE]; memset(ch,'\0',sizeof(ch)); ch[SIZE-1]='\0'; ch[SIZE-2]=']'; ch[0]='['; char circle[]="-\\|/\\0"; while(i<=100) { ch[i]='#'; printf("%100s[%d%%]%c\r",ch,i,circle[i%4]); i++; fflush(stdout); sleep(1); } printf("\n"); }
創建testPro.c文件
#include<stdio.h> #include"ProBar.h" int main() { ProBar(); return 0; }
編譯,執行,運行結果: