1.動靜態庫和動靜態鏈接(操作)
-
靜態庫是指編譯鏈接時,
把庫?件的代碼全部加?到可執??件中
,因此?成的?件?較?
,但在運?時也就不再需要庫?件了。其后綴名?般為“.a”
-
-
動態庫與之相反,在編譯鏈接時并
沒有把庫?件的代碼加?到可執??件中
,?是在程序執?時由運?時鏈接?件加載庫,這樣可以節省系統的開銷。動態庫?般后綴名為“.so”
-
靜態鏈接操作:gcc code.o -o mycode -static
動態鏈接操作:gcc code.o -o mycode
2.自動化構建make/makefile
1.初識makefile
- makefile帶來的好處就是??
“?動化編譯”
,?旦寫好,只需要?個make命令,整個?程完全
?動編譯,極?的提?了軟件開發的效率。 - make是?個命令?具,是?個解釋makefile中指令的命令?具,?般來說,?多數的IDE都有這
個命令,?如:Delphi的make,VisualC++的nmake,Linux下GNU的make。可?,makefile
都成為了?種在?程??的編譯?法。 - make是?條命令,makefile是?個?件,兩個搭配使?,完成項??動化構建。
淺淺嘗試一下:
1.
先創建一個code.c并用vim進行編寫,再新建一個makefile
用vim打開makefile,并寫入以上內容,
:
前為要生成的可執行程序的名字,:
后為源文件(第一行為依賴關系
)- gcc code.c -o code (第二行為
依賴方式
)
make指令完成編譯。
運行也成功
2.具體語法
1.清理代碼文件
如果代碼文件我不想要了,那怎么清理呢?
先vim打開makefile,寫入紅框的內容
- 第一行表示
clean不依賴于任何文件
- 第二行為依賴方式
執行make clean,發現code(可執行文件)已經被刪除
2.依賴關系的推導
test.c存在,推導結束
3.完整的makefile語法
1.類似宏替換的操作
之前我們在makefile里都是直接寫文件名的,這里使用 類似宏替換
的方式替換命令和文件,記住,在使用替換時要加上$()
2.多文件統一編譯為可執行文件
假如我們的文件非常多,那么上述類似宏替換的方法就不行了,舉例:
模擬100個文件的情況
我們來依次解釋:
這句話表示,SRC拿到了當前目錄里 所有以.c結尾的文件
這行表示OBJ是由SRC中 所有.c變為.o得來的
這里的^
是指依賴關系中:后的內容
,@
是指:前的內容
這里%是通配符,:左邊匹配所有.c結尾的文件,<表示將展開的所有.c文件,一個接一個地匹配命令
,形成.o文件
每一行最前面的@是指在外面使用make指令時 不顯示過程,直接給出結果
(可不加)
我們也可以 自我定制執行某一步驟后,想要輸出的提示內容