一般源代碼提供的程序安裝需要通過(guò)配置、編譯、安裝三個(gè)步驟;
查詢可用的配置選項(xiàng)
./configure --help
配置路徑
./configure --prefix=/usr/local/snmp
--prefix是配置使用的最常用選項(xiàng),設(shè)置程序安裝的路徑;
編譯使用make編譯
make -f myMakefile
通過(guò)-f選項(xiàng)顯示指定需要編譯的makefile;如果待使用makefile文件在當(dāng)前路徑,且文件名為以下幾個(gè),則不用顯示指定:
makefile Makefile
系統(tǒng)學(xué)習(xí)makefile的書(shū)寫(xiě)規(guī)則,請(qǐng)參考 跟我一起學(xué)makefile [#]_
CMake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語(yǔ)句來(lái)描述所有平臺(tái)的安裝(編譯過(guò)程)。他能夠輸出各種各樣的makefile或者project文件。使用CMake,能夠使程序員從復(fù)雜的編譯連接過(guò)程中解脫出來(lái)。它使用一個(gè)名為 CMakeLists.txt 的文件來(lái)描述構(gòu)建過(guò)程,可以生成標(biāo)準(zhǔn)的構(gòu)建文件,如 Unix/Linux 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。
makefile編譯過(guò)程中所依賴的非標(biāo)準(zhǔn)庫(kù)和頭文件路徑需要顯示指明
CPPFLAGS -I標(biāo)記非標(biāo)準(zhǔn)頭文件存放路徑
LDFLAGS -L標(biāo)記非標(biāo)準(zhǔn)庫(kù)存放路徑
如果CPPFLAGS和LDFLAGS已在用戶環(huán)境變量中設(shè)置并且導(dǎo)出(使用export關(guān)鍵字),就不用再顯示指定;
make -f myMakefile LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib'
CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'
鏈接多庫(kù)時(shí),多個(gè)庫(kù)之間如果有依賴,需要注意書(shū)寫(xiě)的順序,右邊是左邊的前提;
g++ -o unixApp unixApp.o a.o b.o
選項(xiàng)說(shuō)明:
應(yīng)用:查詢宏展開(kāi)的中間文件:
在g++的編譯選項(xiàng)中,添加 -E選項(xiàng),然后去掉-o選項(xiàng) ,重定向到一個(gè)文件中即可
g++ -g -E unixApp.cpp -I/opt/app/source > midfile
查詢應(yīng)用程序需要鏈接的庫(kù)
$ldd myprogrammer
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)
.. note
關(guān)于ldd的使用細(xì)節(jié),參見(jiàn) :ref:`ldd`
安裝做的工作就簡(jiǎn)單多了,就是將生成的可執(zhí)行文件拷貝到配置時(shí)設(shè)置的初始路徑下
$make install
其實(shí) install 就是makefile中的一個(gè)規(guī)則,打開(kāi)makefile文件后可以查看程序安裝的所做的工作;
configure make install g++