MATLAB---make與makefile簡單介紹


1 make、makefile概述

makefile定義了一系列的規則,來規定哪些部分先編譯,哪些部分后編譯,寫好makefile以后,只需一個make命令就可以讓整個工程完全自動編譯,所以簡單的說,make&makefile實現了大工程的自動化編譯。

2 make

make是如何工作的?

  • make會在當前目錄下找名字為"makefile "或"Makefile"的文件;
  • 若找到makefile文件,接着找第一個目標文件(target),並把它作為最終的目標文件;
  • 若target文件依賴后面的.o文件更新,則執行后面定義的命令會生成target文件;
  • 某個.o文件也會依賴若干個源文件和頭文件,它們根據命令生成.o文件。

根據make的依賴性,make會一層層地去找文件的依賴性,直到最終第一個target文件被編譯成功。整個過程類似於數據結構中棧的操作。

3 makefile

3.1 makefile里是什么?

例子:

target:main.o test.o cc -o target main.o teat.o main.o:main.c x.h cc -c main.c test.o:test.c y.h cc -c test.c clean: rm target main.o test.o

可以看出,makefile中主要由兩個部分組成:

  • 文件依賴關系
  • 生成所需命令

其中clean是一個偽目標文件,可用".PHONY:clean"在其前面注明。執行make命令即可編譯,執行make clean即可刪除所有目標文件。

3.2 makefile中的變量賦值?

  • "="是最基本的賦值,makefile會將整個makefile展開后,再決定變量的值。
  • ":="是覆蓋當前的值,其取決於當前的賦值,而不是最終的賦值(比較好判斷)。
  • "?="是若沒有被賦值過就賦等號后的值。
  • "+="是添加等號后的值。

3.3 簡化makefile

可以利用變量減少重復,及利用makefile的自動推導簡化makefile,例如:

#Makefile objects:main.o test.o target:$(objects) cc -o target $(objects) main.o:x.h #這就用到了自動推導。 test.o:y.h .PHONY:clean #說明clean是一個偽目標文件。 clean: rm target $(objects)

因為這個編譯較簡單,優勢可能不太明顯,若要是大工程,變量和自動推導的使用會讓makefile有很大的簡化。

注:

  • makefile中命令必須以[tab]鍵開始。
  • 若指定特定的makefile,可用"-f"和"--file"參數。
  • include,被包含的文件會被原封不動的放在當前文件包含的位置,如:
include foo.make
#不能以[tab]鍵開始

參考:https://www.cnblogs.com/dengchj/p/4379645.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM