#include<stdio.h>⇠ int main(void)⇠ {⇠ printf("Hello World\n"); thanks();⇠ }⇠
#include<stdio.h>⇠ void thanks(void)⇠ {⇠ printf("Thanks\n");⇠ }⇠
gcc -c hello.c thanks.c
-c 是免去連接,不然主程序調用 thanks那行會報錯。c++
-c 同時會自動生成 hello.o 與 thanks.obash
gcc -o main hello.o thanks.o
在上面的基礎上,假如咱們修改了 thanks.c, 咱們不須要所有從新編譯, 只須要生成新的thanks.o 再與其餘目標文件從新連接便可。 節省時間。函數
記得用pthread寫程序的時候,編譯時總要在後面加上 -lpthread 選項,這是什麼緣由呢?
#include <stdio.h>⇠ int main() {⇠ float val;⇠ val = sin (3.14/2);⇠ printf("%f\n",val);⇠ }
gcc -o main lib.c -lm -L /lib -L /usr/lib
擴展名 .so, 全名爲 libxxx.so
這類函數在編譯的時候只添加一個 函數庫的指針。在執行的時候才須要加載。
函數庫的升級不須要修改其餘程序。優化
ldd xxx.o 能夠分析程序涉及哪些動態函數庫。指針
假如咱們的一個項目又不少程序,這些程序相互引用,一些程序還使用到動態函數庫。那麼咱們編譯的時候將分不少步進行,特別麻煩。 當咱們須要從新編譯的時候,全部步驟仍是得從新來一遍。能不呢省略呢?調試
target: 目標文件1 目標文件2 ... <tab> gcc -o 目標文件1 目標文件2
仍是以上面hello.c, thanks.c 爲例, 忘了的朋友能夠翻頁上去看一下。下面是咱們makefile:c++11
main: hello.o thanks.o gcc -o main hello.o thanks.o clean: rm -f hello.o thanks.o
能夠看到,我有兩個target,這兩個能夠在調用make的時候進行選擇:code
make main make clean
其中:get
makefile當中也能夠進行變量的定義,能夠簡化makefile的編寫:源碼
OBJS = main.o thanks.o main: gcc -o $@ ${OBJS} clean: rm -f ${OBJS}
常常咱們須要經過源碼安裝軟件,那麼它們安裝的步驟是怎樣的呢?