makefile(详细讲解)
目錄
- 1.makeflie
- 2.多個文件執行makefile
1.makeflie
makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率
make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構建
我們使用makefile就在當前目錄下創建makefile/Makefile前單字母大寫小寫都可以。
makefile里面會有什么東西呢?
makefile里面會有依賴關系
依賴關系 :比如有個可執行文件test,但是想有它就要有test.c這個就叫做依賴關系,而使用test.c形成test這個就叫依賴方法
了解了這個我們就來正式使用makefile
在馬克file輸入下面代碼,注意第二行不是用空格,一定要用TAB鍵
我們再把mytest.c文件給寫上
這個時候我們就可以直接make,再運行make生成的可執行文件運行就行了
但是我們想要清理文件怎么辦
vim makefile
改成那樣就可以了.PHONY這是一個偽目標
輸入 make clean就可以清除mytest可執行文件了
而至于為什么默認make是會執行make mytest而不是make clean是因為make mytest在上面,因為它是從上往下默認形成的
.PHONY:相當于makefile的語法格式中的一個關鍵字
比如clean被.PHONY修飾時,表明:總是被執行的
那么我們先來了解下總是不被執行的,比如下面的make 因為生成了mytest
所以接下的make除了第一次創建以外都會報錯
而總是被執行就不會有這種問題,想執行多少次就執行多少次
但是它是怎么區分目標文件的新舊的
Access表示讀取或者進入的時間
再了解下面二個,我們先回憶下文件 = 內容加屬性
Modify表示內容變了的時間
Change表示屬性變了的時間
看下面圖片我們只改變了屬性,可以看到只有change時間變了
但是這里要注意修改了內容,可能會改變屬性,因為改變了內容,大小可能會發生變化
那么我們現在就來證明,因為舊文件比新文件生成的舊那么就不生成
那么我們來用touch來改下Modiy的更新時間看看make會不會成功,我們不改原代碼
可以看到重新生成了
2.多個文件執行makefile
依次創建以下文件
test.c
test.h
#include<stdio.h>extern void show();main.c
#include"test.h"int main() {show();return 0; }makefile文件
hello:main.o test.ogcc -o hello main.o test.o main.o:main.cgcc -c main.c -o main.o test.o:test.cgcc -c test.c -o test.o .PHONY:clean clean:rm -f *.o hello總結
以上是生活随笔為你收集整理的makefile(详细讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES5-11原型与原型链深入、对象继承
- 下一篇: 淘宝API介绍