C++項目實戰(zhàn)之makefile使用
makefile簡介
一個工程中的源文件不計其數(shù)(一個項目有有很多的文件),現(xiàn)在的項目基本都是按模塊進行劃分的,而這些模塊存放在若干目錄中。
makefile中定義了一系列的規(guī)則(這些規(guī)則定義了一系列如何編譯程序的操作,比如哪些文件需要編譯、哪些臨時文件需要及時的清除等),如此以來我們只需要通過make命令就可以一鍵編譯源程序了。
所以常常說makefile帶來的最大的好處就是"自動化編譯",因為只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)效率。(以上用于可能不規(guī)范,是作者的理解)
make簡介
make是一個命令工具,它能夠解釋Makefile文件中的指令,一般來說大多數(shù)IDE都具備這樣的功能。
makefile的編寫的規(guī)則
makefile文件的命名:
makefile 或者 Makefile
makefile的規(guī)則:
三要素:目標(biāo) 依賴 命令
格式==》
- 目標(biāo):依賴
- (TAB)命令
目標(biāo):最終要生成的文件(偽目標(biāo)除外)
依賴:生成目標(biāo)所需要的文件或目標(biāo)(這里的目標(biāo)是子目標(biāo))
命令:通過執(zhí)行命令來操作依賴來生成目標(biāo)
我們來看一個例子
當(dāng)前文件夾有如下5個文件
第一個版本的Makefile
第二個版本我們添加以下子目標(biāo)
添加子目標(biāo)的目的:
- make工作原理1
命令在執(zhí)行前,需要先檢查規(guī)則中的依賴是否存在
- 如果存在,則執(zhí)行命令
- 如果不存在,則向下搜索,檢查有沒有一個規(guī)則的目標(biāo)是這個依賴,
- 如果存在則先執(zhí)行這個子目標(biāo),先生成這個最終目標(biāo)所需的依賴,
- 那么我們有了依賴才可以生成最終目標(biāo)
collect2: error: ld returned 1 exit status //為毛會出現(xiàn)這個問題,好像是子啊制作動態(tài)庫的時候才會用這個問題
第三個版本我們通過自定義變量的方式
第四個版本我們通過makfile中的自動變量
第五個版本使用函數(shù)
makefile中主要使用的只要兩個函數(shù)
wildcard ==》查找指定目錄下的指定文件
src=$(wildcard ./*.c)
patsubst ==》將指定目錄下的什么文件后綴進行替換
obj=$(pastsubst ./%.c,./%.o,$(src))
第6個版本 加上仿函數(shù)
加上仿函數(shù)的目的:
對于makefile而言下面的規(guī)則全都是最終的目標(biāo)提供服務(wù)的。
如果不是最終規(guī)則(第一個規(guī)則)所需要的依賴那么不會區(qū)執(zhí)行。
但是通過偽目標(biāo)就可以打破這個約定,一定會執(zhí)行
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言中的pause()函數(shù)和alarm()函數(shù)以及sleep()函數(shù)
這篇文章主要介紹了C語言中的pause()函數(shù)和alarm()函數(shù)以及sleep()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09C++模板基礎(chǔ)之函數(shù)模板與類模板實例詳解
C++ 除了支持函數(shù)模板,還支持類模板(Class Template),所以下面這篇文章主要給大家介紹了關(guān)于C++模板基礎(chǔ)之函數(shù)模板與類模板的相關(guān)資料,需要的朋友可以參考下2021-06-06C語言實現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度
這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10C/C++字符串函數(shù)之復(fù)制函數(shù)詳解
下面小編就為大家?guī)硪黄狢/C++字符串函數(shù)之復(fù)制函數(shù)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09C++11系列學(xué)習(xí)之可調(diào)用對象包裝器和綁定器
這篇文章主要介紹了C++11系列學(xué)習(xí)之可調(diào)用對象包裝器和綁定器,下文基于C++的相關(guān)資料展開詳細內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-04-04