中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux自動化構建工具make和Makefile怎么使用

發布時間:2023-04-17 11:12:21 來源:億速云 閱讀:80 作者:iii 欄目:開發技術

這篇文章主要講解了“Linux自動化構建工具make和Makefile怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux自動化構建工具make和Makefile怎么使用”吧!

一、make和Makefile的作用

在一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的 規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜 的功能操作。

所以,makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編 譯,極大的提高了軟件開發的效率。

make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一 種在工程方面的編譯方法。 make是一條命令,makefile是一個文件,兩個搭配使用,就可以完成項目自動化構建。

二、make和Makefile的使用

在了解依賴關系和依賴方法之前,我們來寫一個C語言的小程序。

Linux自動化構建工具make和Makefile怎么使用

我們創建了一個make.c的文件,并寫上了一句hello make的代碼。

那么我們再創建一個Makefile文件(makefile也可以,但不建議)。

然后我們編輯Makefile文件并寫上如下代碼:

Linux自動化構建工具make和Makefile怎么使用

然后我們保存退出。

然后我們可以執行make命令。如果提示make不存在,則是因為沒有安裝,可以切換至root身份安裝。安裝代碼:yum install make 或者 sudo install make

正常執行make后會出現如下顯示。

Linux自動化構建工具make和Makefile怎么使用

然后我們ll來查看當前目錄下的文件。

我們可以發現多了一個可執行程序make。那我們運行用 ./make 運行試試。

Linux自動化構建工具make和Makefile怎么使用

我們會發現這個可執行程序輸出make。

這就是我們的自動化構建工具,只需要在Makefile里面配置一下。往后直接輸入make即可編譯代碼。那我們再輸入一次make試試。

Linux自動化構建工具make和Makefile怎么使用

提示我們 make程序是最新的。 也就是說,如果你沒有修改或者更新程序的話。 那么則不會為你編譯,因為你程序都沒動呀,編譯它干嘛。

那么此時我們回過來分析一下 Makefile里面寫的代碼。

Linux自動化構建工具make和Makefile怎么使用

首先我們把它分為三部分

make

make.c

gcc make.c -o make -std=c99

這三者的關系就是, make 是依賴于 make.c 產生的。 它們兩者有依賴關系 , 而gcc make.c -o make -std=c99則是 make 依賴于 make.c的方法,叫依賴方法

什么是依賴關系和依賴方法?

打個比方。

月底了,你的生活費用光了。 這個時候你給你爸爸打電話,和他說:“爸,月底了。我沒錢了。"。此時你的爸爸就知道了,會給你打生活費。 這里面,你和你的父親是父子關系,所以你依賴于你的父親,你們之間有依賴關系。而你的父親給你生活費,這是你依賴父親的一種方式,所以這就是依賴方法。如果此時你給你室友的父親打電話要生活費,他會直接讓你滾。因為你們根本不構成依賴關系,不構成依賴關系就沒有依賴方法。

Linux自動化構建工具make和Makefile怎么使用

所以我的程序也是一樣的。 make 是生成的可執行程序。 而它依賴于make.c,因為它是從 make.c編譯來的。而依賴方法則是 執行 gcc make.c -o make -std=c99 這條命令。

依賴關系的原理

  • make會在當前目錄下找名字叫“Makefile”或“makefile”的文件。

  • 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件, 并把這個文件作為最終的目標文件。

  • 如果hello文件不存在,或是hello所依賴的后面的test.o文件的文件修改時間要比test這個文件新(可 以用 touch 測試),那么,他就會執行后面所定義的命令來生成test這個文件。

  • 如果test所依賴的test.o文件不存在,那么make會在當前文件中找目標為test.o文件的依賴性,如果 找到則再根據那一個規則生成test.o文件。(這有點像一個堆棧的過程)

  • 當然,你的C文件和H文件是存在的啦,于是make會生成 test.o 文件,然后再用 test.o 文件聲明 make的終極任務,也就是執行文件test了。

  • 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文 件。

  • 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯, 而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。

  • make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起, 我就不工作啦。

清理

我們平時在寫代碼的時候,經常會需要反復編譯,執行代碼。

而在下一次重新編譯之前,需要清理一下上次生成的可執行程序。但是清理的時候可能清理錯誤,不小心把源文件刪了,這時又造成了問題。

那么我們有沒有方法解決呢?答案是當然有。

我們繼續編輯Makefile文件。

Linux自動化構建工具make和Makefile怎么使用

我們在原有的基礎上加上了

.PHONY:clean

clean:

	rm -f make

那么.PHONY有什么作用呢?

.PHONY修飾的是一個偽目標的,偽目標總是被執行的。clean是自己定義的一條make指令,使用方法為 make clean

那我們來試試吧這條指令

Linux自動化構建工具make和Makefile怎么使用

我們可以看到它被清理了,那為什么說偽目標它總是被執行的呢?我們多次執行它看看。

Linux自動化構建工具make和Makefile怎么使用

我們可以一直執行它,那么我們多次執行make呢?

Linux自動化構建工具make和Makefile怎么使用

我們會發現,make執行了一次,就無法執行了,因為沒有被.PHONY修飾。那么我用.PHONY修飾它再試試。

Linux自動化構建工具make和Makefile怎么使用

然后我們保存退出,多次執行make

Linux自動化構建工具make和Makefile怎么使用

我們就可以看到它被多次執行了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

我們保存退出,多次執行make

Linux自動化構建工具make和Makefile怎么使用

我們就可以看到它被多次執行了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

感謝各位的閱讀,以上就是“Linux自動化構建工具make和Makefile怎么使用”的內容了,經過本文的學習后,相信大家對Linux自動化構建工具make和Makefile怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛冈县| 子长县| 凤阳县| 星座| 满洲里市| 巢湖市| 阳东县| 永福县| 石门县| 乌兰浩特市| 辽中县| 上犹县| 大同市| 明水县| 镇原县| 合江县| 全椒县| 故城县| 隆安县| 太保市| 三明市| 卓尼县| 湖南省| 定陶县| 兴义市| 越西县| 连城县| 乐平市| 京山县| 汶川县| 高州市| 开封县| 本溪市| 古蔺县| 永春县| 稻城县| 额敏县| 鄂伦春自治旗| 高唐县| 濉溪县| 辽中县|