aclocal ; autoheader; automake ; autoconf
./configure 自動生成makefile檔案
把make過程列印的所有資訊都儲存在***.log中。
$make 2>&1|tee ***.log
./configure --prefix=/tmp/prefix
./configure --help
make install
destdir=/whereto
make uninstall
make v=99 //make時顯示詳細資訊
./configure
--disable-static 不編譯靜態檔案
aclocal
根據configure.in
檔案的內容,自動生成
aclocal.m4
檔案aclocal -i /usr/share/aclocal -i /usr/m4-1.4.9/m4 --install
autoconf
從configure.in
這個列舉編譯軟體時所需要各種引數的模板檔案中建立
configure
automake
會根據你寫的
makefile.am
來自動生成
makefile.in
執行configure
生成makefile
make -f pax.mk // run pax.mk
automake --force-missing --add-missing
ldd --version 檢視glibc版本
在makefile中:$@
表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,"$@"就是匹配於目標中模式定義的集合。 $%
僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果乙個目標是"foo.a(bar.o)",那麼,"$%"就是"bar.o","$@"就是 "foo.a"。如果目標不是函式庫檔案(unix下是[.a],windows下是[.lib]),那麼,其值為空。
$<
依賴目標中的第乙個目標名字。如果依賴目標是以模式(即"%")定義的,那麼"$<"將是符合模式的一系列的檔案集。注意,其是乙個乙個取出來的。 $?
所有比目標新的依賴目標的集合。以空格分隔。 $^
所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,那個這個變數會去除重複的依賴目標,只保留乙份。
cflags: 指定標頭檔案(.h檔案)的路徑,如:cflags=-i/usr/include -i/path/include。同樣地,安裝乙個包時會在安裝路徑下建立乙個include目錄,當安裝過程中出現問題時,試著把以前安裝的包的include目錄加入到該變數中來。
ldflags:gcc 等編譯器會用到的一些優化引數,也可以在裡面指定庫檔案的位置。用法:ldflags=-l/usr/lib -l/path/to/your/lib。每安裝乙個包都幾乎一定的會在安裝目錄裡建立乙個lib目錄。如果明明安裝了某個包,而安裝另乙個包時,它愣是 說找不到,可以抒那個包的lib路徑加入的ldfalgs中試一下。
libs:告訴鏈結器要鏈結哪些庫檔案,如libs = -lpthread -liconv
簡單地說,ldflags是告訴鏈結器從**尋找庫檔案,而libs是告訴鏈結器要鏈結哪些庫檔案。不過使用時鏈結階段這兩個引數都會加上,所以你即使將這兩個的值互換,也沒有問題。
有時候ldflags指定-l雖然能讓鏈結器找到庫進行鏈結,但是執行時鏈結器卻找不到這個庫,如果要讓軟體執行時庫檔案的路徑也得到擴充套件,那麼我們需要增加這兩個庫給」-wl,r」:
config.log 搜尋關鍵字cannot
1.error
configure.in:7: version mismatch. this is automake 1.9.6,
configure.in:7: but the definition used by this am_init_automake
configure.in:7: comes from automake 1.9.5. you should recreate
configure.in:7: aclocal.m4 with aclocal and run automake again.
解決方法
$aclocal
$automake
將重新生成makefile檔案
2.[root@localhost src]# ./configure
-bash: ./configure: no such file or directory
[root@localhost src]# aclocal
aclocal: `configure.ac' and `configure.in' both present.
aclocal: proceeding with `configure.ac'.
[root@localhost src]# autoconf
autoconf: warning: both `configure.ac' and `configure.in' are present.
autoconf: warning: proceeding with `configure.ac'.
root@localhost src]# ./configure
checking which defines needed for makedepend...
checking for a bsd-compatible install... /usr/bin/install -c
aclocal, autoconf, 之後可以正常執行./configure了
3.
+ autoreconf --install
configure.ac:32: warning: macro 'am_prog_libtool' not found in library
configure.ac:32: error: possibly undefined macro: am_prog_libtool
if this token and others are legitimate, please use m4_pattern_allow.
see the autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
autoreconf -fvi
to make sure everything is updated.
4.
configure.ac:10: error: possibly undefined macro: ac_prog_libtool
if this token and others are legitimate, please use m4_pattern_allow.
see the autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
apt-get install libtool
5.
$ sudo pacman -s pkg-config xorg-server-devel libtool automake
$ libtoolize --force
consider adding ac_config_macro_dir([m4]) to configure.ac
and re-run libtoolize --force.
$ vim configure.ac
$ libtoolize --force
$ aclocal
$ autoheader
$ automake --force-missing --add-missing
$ autoconf
6. ./configure: line 17661: syntax error near unexpected token `harfbuzz,'
slove: aclocal /usr/pkg-config-0.25/share/aclocal --install
7.[root@localhost src]# ./autogen.sh
which: no gtkdocize in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
*** no gtk-doc found, please install it ***
8.[root@localhost src]# libtoolize
-bash: libtoolize: command not found
export path='/path/to/libtool/bin'
linux make命令與makefile檔案
3.語法 最後的實踐 通俗的來講 其實和 shell 指令碼差不多,只不過有一些自己的規則可以讓你使用起來更方便,比如你寫 shell 指令碼的話,只能寫在乙個檔案裡然後執行這個檔案,makefile 可以讓你執行這個裡面的某一條命令。makefile檔案由一系列規則 rules 構成。每條規則的形...
Linux make 整理遇到的坑
整理從什麼都沒有裝到make modules 的過程 在 make menuconfig 時碰見的問題 在終端直接輸入 sudo apt get install flex 在終端直接輸入 sudo apt get install bison y 其它遇到的問題 在終端直接輸入 sudo apt ge...
Linux Make使用的重定向
linux中,指令碼語言環境中,即你用make 即其他一些普通linux命令,比如ls,find等,不同的數字,代表不同的含義 數字含義標準叫法 0標準輸入 stdin standard input 1標準輸出 stdout standard output 2標準錯誤輸出 stderr standa...