make.conf是 FreeBSD 中 make(1) 的配置文件。若是不瞭解改變這些配置可能帶來的反作用,則不該修改其中的任何配置。html
經過修改 make.conf 能夠達到下面這些目的:c++
不過,許多時候可能會但願使用另一些配置文件來達到相似的目的。因爲 make.conf 是全局的 FreeBSD make(1) 配置,對其進行不適當的改動,特別是添加優化選項,很是容易致使各類各樣的問題,所以通常狀況下不須要修改這個文件。shell
其餘一些與 make.conf 起相似做用,但範圍受限的 make(1) 配置文件,包括 src.conf(5) 和 ports.conf,關於如何使用這些文件的具體介紹,請參見本文末尾的「參閱」部分。vim
FreeBSD 的 make(1) 在執行聯編操做的時候會引用 /usr/share/mk/sys.mk。若是 make(1) 不是以徹底 POSIX 模式運行,則後者會引入 /etc/make.conf (或由 make 變量 MAKE_CONF 所定義的其餘文件,例如,若是須要在某一次聯編過程當中臨時禁用 make.conf,能夠在 make 時指定 MAKE_CONF=/dev/null)。服務器
但願在聯編過程當中傳遞給 make 程序自己,或做爲環境傳遞給編譯器等其餘程序的參數,能夠經過 make.conf 來指定。再次強調, make.conf 是一個全局的配置,在增長配置時,其內容會影響 全部 使用 FreeBSD make(1) 的聯編過程。添加任何配置必定要慎重。函數
下面以 vim 舉例。使用 ports 套件默認的編譯選項編譯出來的vim中的gvim是使用gtk1圖形庫的,可是我很喜歡gtk2,由於gtk2更加的漂亮。爲了使用 gtk2,有兩個選擇:性能
cd /usr/ports/editor/vim; make WITH_GTK2=yes install clean
,可是這樣彷佛比較麻煩。
注意:後一種方法中,直接將 WITH_GTK2=yes 加入到 make.conf 將影響全部port的編譯過程,這極可能不是但願的結果,所以比較保險的作法是使用下面這樣的配置:優化
.if ${.CURDIR} == "/usr/ports/editors/vim" WITH_GTK2=yes .endif
這樣,只有在執行 make 的當前目錄是 /usr/ports/editors/vim 時,纔會定義 WITH_GTK2=yes。ui
很明顯,如此定義 make.conf 十分繁瑣,爲了解決這個問題,能夠經過 Ports 套件安裝 ports-mgmt/portconf 並配置 ports.conf。url
在FreeBSD系統安裝之後的默認設置中,/etc/make.conf這個文件並不存在,你能夠本身創建一個,若是系統安裝了perl,那麼perl會替你創建這個文件,這就是爲何幾乎每一個人的/etc/make.conf都有一行是關於perl的版本的內容。創建這個文件的命令很簡單,由於make.conf自己就是一個純文本文件,可是,顯然你須要root權限來建立或者修改這個文件。
# touch /etc/make.conf
make.conf的語法很是的簡單,其中:#
表明註釋,在#
以後的內容都會被忽略;除註釋外,每一行是內容格式以下:一個變量,一個賦值運算符=
,一個具體值。
# cpu type CPUTYPE=athlon64
指定系統的處理器類型,告訴gcc在編譯軟件的時候針對這個處理器進行優化,從FreeBSD官方論壇的相關討論來看,這個參數對於提高系統性能比較重要。具體的能夠參考/usr/share/examples/etc/make.conf來決定本身的處理器類型。
# ports compilation flag CFLAGS= -O2 -fno-strict-aliasing -pipe CXXFLAGS+= -fconserve-space
告訴系統在編譯ports的時候使用哪些編譯參數,就是優化的級別,推薦使用-O2,不要使用-O3,優化級別越高須要的編譯時間越長,而且可能致使某些不可預知的問題。
# shell MAKE_SHELL=sh
告訴系統在編譯過程當中使用哪一個shell。
# kernel compilation flag COPTFLAGS= -O2 -pipe
告訴系統編譯內核時使用什麼優化參數,這個須要單獨的指定,並非使用ports的編譯參數,可是編譯內核的時候所使用的處理器類型並不須要單獨指定。
# kernel config KERNCONF=MYKERNEL
告訴系統你/sys/amd64/conf目錄下面哪一個文件是你的kernel配置文件,這樣在/usr/src下面直接make buildkernel就能夠了,就是說編譯內核的時候,不須要手工告訴系統內核的配置文件是哪一個。
# install command INSTALL=install -C
告訴系統安裝編譯完的軟件時使用的安裝命令。
# do not build modules with the kernel NO_MODULES=true
告訴系統編譯內核的時候只編譯內核的配置文件(就是上面的MYKERNEL)裏面包含的東西,這樣就不會對配置文件之外的任何東西進行編譯了。FreeBSD系統在編譯內核的時候,會把配置文件裏面的東西以二進制的形式之間編譯到生成的內核中,其餘的在配置文件裏面沒有指定的就編譯成模塊,這一行的做用在於,不編譯那些模塊,配合ccache能夠在1分鐘左右完成內核的編譯,詳細的狀況能夠看這裏http://blog.chinaunix.net/u2/74710/showart_1191786.html。
# avoid compiling profiled libraries NO_PROFILE=true
告訴系統在編譯userland的時候不編譯用於性能分析的函數庫。
# for update SUP_UPDATE=true SUP=/usr/bin/csup SUPFLAGS=-L 2 SUPHOST=cvsup5.cn.FreeBSD.org SUPFILE=/usr/share/examples/cvsup/standard-supfile PORTSSUPFILE=/usr/share/examples/cvsup/ports-supfile DOCSUPFILE=/usr/share/examples/cvsup/doc-supfile
告訴系統在進入/usr/src目錄之後執行make update時升級kernel、userland、ports以及文檔系統的代碼樹,而且指定升級時使用的程序(/usr/bin/csup)、使用的參數(-g -L 2)、使用的服務器(cvsup5.cn.FreeBSD.org)以及升級時分別使用相應的supfile。
# documentation language DOC_LANG=en_US.ISO8859-1
告訴系統,我在/usr/doc目錄下運行make install clean時只生成英文的文檔,生成的文檔在/usr/share/doc下面,包含FreeBSD的各類文檔。
# for textproc/docproj WITH_JADETEX=yes
編譯文檔須要安裝docproj這個port,而且這個port老是提問題,因而我就直接把答案寫在這裏了,這樣就不用我每次回答了。
# for vim .if ${.CURDIR} == "/usr/ports/editors/vim" WITH_GTK2="yes" .endif
告訴系統使用gtk2圖形庫,看上面我舉的那個vim的例子。
# for gnome WITH_GECKO=libxul
告訴系統屏蔽掉firefox,不少人都喜歡firefox,我一直使用gnome的epiphany,不喜歡firefox,可是epiphany在編譯的時候須要一個下層的渲染引擎,默認是使用和firefox同樣的引擎,因此默認會安裝firefox,經過這個選項能夠改變這個倚賴關係。
# set server for distfiles #MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?=ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
告訴系統去哪裏下載ports裏面軟件的源代碼,這個不用多說了,語法也很簡單,http、ftp表明的是協議或者說是服務類型,須要注意的不是每一個http或者ftp都使用相同的目錄結構。你能夠去FreeBSD的handbook上找一下有那些服務器,我比較喜歡臺灣的ftp8,就是在教育網那個,由於我也在教育網上。我雖然寫了兩個,可是屏蔽掉了的一個,若是ftp8宕機了,我就註釋掉ftp8,用上面的那個,若是不寫這個的話,編譯port的時候會從prot的Makefile裏面指定的下載地址下載,可能會比較慢,固然也可能會比較快(這個可能性比較小)。
# for ccache .if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE) CC=/usr/local/libexec/ccache/world-cc CXX=/usr/local/libexec/ccache/world-c++ .endif
這個是針對於ccache的設置,若是要使用ccache必須添加這個。ccache能大幅度的縮短編譯時間,因此它能能幫你省不少時間,能幫全人類省不少電。我我的以爲應該給ccache的做者頒發一個「諾貝爾綠色和平獎」,雖然我不知道有沒有這個獎。
################################################################################ # cpu type CPUTYPE=athlon64 # ports compilation flag CFLAGS=-O2 -fno-strict-aliasing -pipe CXXFLAGS+=-fconserve-space # shell MAKE_SHELL=sh # kernle compilation flag COPTFLAGS=-O2 -pipe # kernel config KERNCONF=MYKERNEL # install command INSTALL=install -C # do not build modules with the kernel NO_MODULES=true # avoid compiling profiled libraries NO_PROFILE=true ################################################################################ # for update SUP_UPDATE=true SUP=/usr/bin/csup SUPFLAGS=-L 2 SUPHOST=cvsup5.cn.FreeBSD.org SUPFILE=/usr/share/examples/cvsup/standard-supfile PORTSSUPFILE=/usr/share/examples/cvsup/ports-supfile DOCSUPFILE=/usr/share/examples/cvsup/doc-supfile # documentation language DOC_LANG=en_US.ISO8859-1 # for textproc/docproj WITH_JADETEX=yes ################################################################################ # for vim .if ${.CURDIR} == "/usr/ports/editors/vim" WITH_GTK2="yes" .endif # for gnome WITH_GECKO=libxul ################################################################################ # set server for distfiles #MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?=ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ ################################################################################ # for ccache .if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE) CC=/usr/local/libexec/ccache/world-cc CXX=/usr/local/libexec/ccache/world-c++ .endif ################################################################################ # added by use.perl 2009-05-05 08:38:03 PERL_VERSION=5.8.9
如今,你能夠:
歡迎補充。