FreeBSD系統make.conf文件介紹

make.conf的主要功能

make.conf是 FreeBSD 中 make(1) 的配置文件。若是不瞭解改變這些配置可能帶來的反作用,則不該修改其中的任何配置。html

經過修改 make.conf 能夠達到下面這些目的:c++

  • 優化系統:設定系統的處理器類型、編譯參數、優化級別。
  • 配置系統的升級服務器以及升級內容:告訴系統去哪裏下載kernel和userland的源代碼和ports的代碼樹、去哪裏下載ports編譯時使用源代碼包。

不過,許多時候可能會但願使用另一些配置文件來達到相似的目的。因爲 make.conf 是全局的 FreeBSD make(1) 配置,對其進行不適當的改動,特別是添加優化選項,很是容易致使各類各樣的問題,所以通常狀況下不須要修改這個文件。shell

其餘一些與 make.conf 起相似做用,但範圍受限的 make(1) 配置文件,包括 src.conf(5) 和 ports.conf,關於如何使用這些文件的具體介紹,請參見本文末尾的「參閱」部分。vim

make.conf的主要文檔

make.conf的基本原理

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,有兩個選擇:性能

  1. 編譯的時候手工把這個選項加進去: cd /usr/ports/editor/vim; make WITH_GTK2=yes install clean,可是這樣彷佛比較麻煩。
  2. 使用make.conf:直接把WITH_GTK2=yes這句寫到make.conf裏面,這樣系統在編譯vim的時候會把這個選項自動地包含進去。

注意:後一種方法中,直接將 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.confurl

提示

在FreeBSD系統安裝之後的默認設置中,/etc/make.conf這個文件並不存在,你能夠本身創建一個,若是系統安裝了perl,那麼perl會替你創建這個文件,這就是爲何幾乎每一個人的/etc/make.conf都有一行是關於perl的版本的內容。創建這個文件的命令很簡單,由於make.conf自己就是一個純文本文件,可是,顯然你須要root權限來建立或者修改這個文件。

# touch /etc/make.conf

個人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的做者頒發一個「諾貝爾綠色和平獎」,雖然我不知道有沒有這個獎。

個人make.conf的所有內容:

################################################################################
# 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

後記:

如今,你能夠:

  • 進入/usr/src目錄使用make update升級系統的kernel、userland、doc、ports樹的源代碼了。
  • 進入/usr/doc目錄使用make install clean來編譯安裝最新的文檔了。

歡迎補充。

相關文章
相關標籤/搜索