Make

了解簡單的makefile

  • July 13, 2022
.PHONY:hello
hello:c_mem.c
   cc  c_mem.c -o c_mem

make 命令將生成文件 c_mem。

.PHONY:hello
hello:c_mem.c
   cc  c_mem.c

make 命令將生成文件 a.out。


所有這些對我來說似乎都有意義。但是來自手冊:https ://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html

目標通常是程序生成的文件的名稱;目標的範例是執行檔或目標文件。目標也可以是要執行的操作的名稱,例如“乾淨”(請參閱虛假目標)。

先決條件是用作創建目標的輸入的文件。一個目標通常取決於幾個文件。

假冒:https ://stackoverflow.com/questions/2145590/what-is-the- purpose-of-phony-in-a-makefile 所以我不確定

.PHONY:hello
hello:c_mem.c
   cc  c_mem.c -o c_mem

: hello和**hello:**是什麼意思?


我可以將makefile解釋為

整個項目名稱別名為hello,在文件 c_mem.c 的 hello 中執行以下命令

cc  c_mem.c -o c_mem

Makefile 解釋如下:

target: <dependencies>
 commands to produce target
  • 冒號:始終屬於目標。
  • 建構目標時將檢查所有依賴項(文件日期),因此所有需要的依賴項將在需要時自動更新。
  • 重新建構依賴項後(比目標更新),執行列出的命令

如您提供的連結下的文章中所述:

PHONY targets are not associated with (output) files

因此,您始終能夠在需要時建構目標,而不受文件日期的影響(例如:)make clean

.PHONY: clean
clean:
  rm -rf build/*

我建議使用CMake它,它是一個生成器Makefiles,但在語法中更容易理解。Makefiles會變得很亂。

引用自:https://unix.stackexchange.com/questions/709676