# FreeBSD Make 介紹 常見的 Make 種類包括 * GNU Make (GMake), Linux 使用 * Nmake: Windows 使用 * CMake, 一個開源的跨平台自動化建構系統,因為跨平台,常常用在 C/C++ 專案上 * BSD Make, FreeBSD 使用,實際上是從 NetBSD 那邊移植過來的,請參考[論壇討論](https://forums.freebsd.org/threads/building-with-bmake.77173/)跟 [bmake 介紹](https://www.crufty.net/help/sjg/bmake.html) [编译工具make、gmake、cmake、nmake和Dmake的区别](https://blog.csdn.net/whatday/article/details/83825897) ## Makefile FreeBSD 的 Makefile 會常常 include 一些東西,以 rwhod(8) command 的 Makeile 為例 ([freebsd-src/usr.sbin/rwhod/Makefile](https://github.com/freebsd/freebsd-src/blob/1d14e88e5332cfddbec1893f6b5332f81d378d61/usr.sbin/rwhod/Makefile)) ``` PROG= rwhod MAN= rwhod.8 PACKAGE=rcmds WARNS?= 3 .include <bsd.prog.mk> ``` 可以看到最下面會有 `include bsd.prog.mk` 這些東西其實也是一個 makefile,會放在 [freebsd-src/share/mk/](https://github.com/freebsd/freebsd-src/tree/1d14e88e5332cfddbec1893f6b5332f81d378d61/share/mk) 底下,而我們可以看同樣目錄下的 [bsd.README](https://github.com/freebsd/freebsd-src/blob/1d14e88e5332cfddbec1893f6b5332f81d378d61/share/mk/bsd.README) 來了解這些 include 的 mk 檔案試做什麼的。 可以看到 bsd.prog.mk 是用來 build program,同樣也有提到 PROG 指定要產生的 program and MAN 指定 man page。 PACKAGE 可能表示相依的套件,這個我到是沒看到有詳細的講解 WARNS 表示編譯器警告等級,這個我也是沒看到有詳細的講解,只是說可以設定這個變數。 而同樣在 bsd.README 也有講到我們能執行的 target ![image](https://hackmd.io/_uploads/SkUCneHxR.png) 其中 depend 會產生 Makefile.depend file,表示相依性的 file。 而在寫 Makefile 會有相對的 styel 教遵守,這時候可以看 [STYLE.MAKEFILE(5)](https://man.freebsd.org/cgi/man.cgi?query=style.Makefile&apropos=0&sektion=5&manpath=FreeBSD+15.0-CURRENT&arch=default&format=html)。 [MAKE.CONF(5)](https://man.freebsd.org/cgi/man.cgi?query=make.conf&sektion=5&apropos=0&manpath=FreeBSD+14.0-RELEASE+and+Ports) 也會介紹一些常見的 FLAG。