makefile中的標的(di)

  • 什麼是 標的?
    • 標的就是在makefile中單冒號前的名稱,是代表了一個與他同名的文件,編譯之後生成的.o文件,編譯鏈接之後生成的可執行文件或者其他任何類型的文件,例如下邊例子中main這個標的代表的就是main這個可執行文件。
    main:
    	    gcc -o main main.c
    
  • 標的的語法
    	target ...: prerequisites
            command
            command
    
    target代表的是一個 標的(可以有1+個),prerequisites代表的是這個標的所依賴的標的(1+個),下面那個command就是生成這個標的 的命令。
  • 標的 在makefile中的執行過程
    • 1.makefile中的每個標的都代表了一個文件。
    • 2.如果只運行make命令(區別make all等),那麼默認執行第一個標的。
    • 3.執行一個標的時,會做兩件事情:
      • 3.1.查看與這個標的同名的文件是否存在,如果不存在,那麼就運行這個標的下面的命令。
      • 3.2.如果與這個標的同名的文件已經存在,那麼就檢查與這個標的同名的文件是否需要更新(即標的文件的修改時間是否早於依賴文件的修改時間),如果需要更新,那麼就運行這個標的下面的命令。
  • 重要的例子
    • 例1
      		main:
      				gcc -o main main.c
      
    如果makefile這樣寫,第一次make命令能編譯,後面如果還想再用make命令編譯的話,就會出現這樣的錯誤:make “main” is up to date.即使更改了main.c中的代碼,也會出現這樣的錯誤。原因就是那個main標的所依賴的標的文件爲空,所以那個main文件永遠不會過期,所以,每回執行make命令都會提示main is up to date.(意思是這個文件是最新的,不需要更新了)
    • 例2(clean標的):
    main: main.c
    	gcc -o main main.c
    clean:
    	rm main
    
    如果運行make clean命令,那麼就會刪除main這個可執行文件,那麼這個標的的原理是什麼呢?其實當運行make clean命令之後,它的執行步驟是這樣的:
      由於clean標的沒有依賴的文件,所以它就是檢查clean這個文件是否存在,如果不存在,那麼執行clean標的下面的命令來生成clean文件。但是下面的rm命令又不會生成clean文件,所以導致的結果就是每回我們運行make clean命令,都會執行下面的rm命令。如下圖所示:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章