C高級(jí)技術(shù)
makefile使用
- 編譯工具GCC
- 源文件(.c)--->預(yù)處理(.i)--->匯編(.s)--->目標(biāo)(.o)--->鏈接(*.exe)
gcc -E main.c -o main.i gcc -S main.i -o main.s gcc -c main.s -o main.o gcc main.o -o main ./main->可執(zhí)行 - makefile文件的編寫
一個(gè)工程里文件不計(jì)其數(shù),其按類型功能與模塊分別放在若干個(gè)目錄里。
makefile制定了哪些需要重新編譯哪些不要。
#FINAL:=main
#OBJECTS:=a.o b.o #代表后面所有的依賴文件
#$(FINAL):$(OBJECTS)
# gcc $^ -o $(FINAL)#$^代表左邊第一個(gè)依賴文件
#a.o:a.c
# gcc -c $< -o a.o
#b.o:b.c
# gcc -c $< -o b.o
#clean:
# rm *.o $(FINAL)
FINAL:=main
OBJECTS:=a.o b.o #代表后面所有的依賴文件
$(FINAL):$(OBJECTS)
gcc $^ -o $(FINAL)#$^代表左邊第一個(gè)依賴文件
%.o:%.c
gcc -c $< -o $@
clean:
rm *.o $(FINAL)
多文件聯(lián)合編譯
#include <stdio.h>
#include "b.h"
- #include "b.h"理論上只能包含一次,但是如果重復(fù)包含了就會(huì)出現(xiàn)錯(cuò)誤,所以我們使用#ifndef b_h--->#define b_h--->#endif.在第二次調(diào)用的時(shí)候,不符合#ifndef.所以不會(huì)重復(fù)出現(xiàn).
extern int c;:extern外部找c,只起聲明作用,表示當(dāng)前用到得c要去外部文件找同名變量是用auto修飾的.
int main()
{
// c=0;//得到的值為0
printf("c=%d",c);
return 0;
}
- c.c用static修飾全局變量,代表當(dāng)前這個(gè)變量智能被當(dāng)前的文件訪問,外部文件訪問不到.
//<>:代表直接去系統(tǒng)庫找,""代表先到當(dāng)前目錄下找,如果當(dāng)前目錄下找不到就會(huì)去系統(tǒng)找.
extern int sum(int,int);//因?yàn)閕包含了頭文件"c.h".
int main()
{
int c=sum(1,2);
printf("sum=%d\n",c);
return 0;
}