Linux學習筆記——例說makefile 多個檔案
0.前言
從學習C語言開始就慢慢開始接觸makefile,查閱了很多的makefile的資料但總感覺沒有真正掌握makefile,如果自己動手寫一個makefile總覺得非常吃力。所以特意藉助部落格總結makefile的相關知識,通過例子說明makefile的具體用法。
例說makefile分為以下幾個部分,更多內容請參考【例說makefile索引博文】
2.含有多個C檔案
3.需要包括標頭檔案路徑
4.增加巨集定義
5.增加系統共享庫
6.增加自定義共享庫
7.一個實際的例子
【程式碼倉庫】——makefile-example
程式碼倉庫位於bitbucket,可藉助TortoiseHg(GUI工具)克隆程式碼或者在網頁中直接下載zip包。
1.三個C檔案
三個檔案位於同一個目錄中。
【test.c】
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 2;
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("a+b=%d\n", add(a,b));
printf("a-b=%d\n", sub(a,b));
return 0;
}
【test-add.c】
int add(int a, int b)
{
return a+b;
}
【test-sub.c】
int sub(int a, int b)
{
return a-b;
}
2.複習GCC指令
多個C檔案和單個C檔案的處理過程相似,此時-c或-o之後可以增加多個C檔案或目標檔案。
【編譯原始檔】
gcc -c test.c test-add.c test-sub.c
【連結目標檔案】
gcc -o test test.o test-add.o test-sub.o
【執行目標檔案】
./test
【控制檯輸出】
a=3
b=2
a+b=5
a-b=1
3.編寫makefile檔案
【makefile】
請替換其中的[tab],並以程式碼倉庫中的makefile檔案為主。
# 指令編譯器和選項
CC=gcc
CFLAGS=-Wall -std=gnu99
# 目標檔案
TARGET=test
# 原始檔
SRCS=test.c test-add.c test-sub.c
OBJS = $(SRCS:.c=.o)
$(TARGET):$(OBJS)
# @echo TARGET:$@
# @echo OBJECTS:$^
[tab]$(CC) -o $@ $^
clean:
[tab]rm -rf $(TARGET) $(OBJS)
%.o:%.c
[tab]$(CC) $(CFLAGS) -o $@ -c $<
【具體說明】
【1】更多說明請參考:例說makefile——單個檔案
【2】相對於單個檔案,此處僅修改了SRCS=test.c test-add.c test-sub.c,變數SRCS追加了多個C檔案。相比單個檔案的情況,僅僅修改了這一行。
【3】檔案和檔案之間通過空格隔開。
【執行過程】
make clean && make
【控制檯輸出】
rm -rf test test.o test-add.o test-sub.o
gcc -Wall -std=gnu99 -o test.o -c test.c
gcc -Wall -std=gnu99 -o test-add.o -c test-add.c
gcc -Wall -std=gnu99 -o test-sub.o -c test-sub.c
gcc -o test test.o test-add.o test-sub.o
從控制檯的輸出可以看出,通過make clean清除上一次的可執行檔案和目標檔案,然後依次編譯各個C檔案,最後把3個目標檔案連結為最終可執行檔案。
相關文章
- Makefile學習筆記筆記
- vim學習筆記——多檔案、多視窗編輯筆記
- Makefile例項學習
- Linux 學習筆記--檔案打包與解壓縮Linux筆記
- 4、Linux入門學習筆記 檔案操作命令Linux筆記
- Linux下的makefile編寫 ——陳皓《跟我一起寫Makefile》學習筆記(二)Linux筆記
- 嵌入式之Makefile學習筆記筆記
- Linux學習筆記:rm刪除檔案和資料夾Linux筆記
- Linux 學習筆記--環境變數與檔案查詢Linux筆記變數
- Linux 學習筆記--目錄結構及檔案基本操作Linux筆記
- DVWA-檔案包含學習筆記筆記
- 學習筆記:robots.txt檔案筆記
- Linux 學習筆記--使用者及檔案許可權管理Linux筆記
- Linux 學習筆記Linux筆記
- 忽略某些檔案 —— Git 學習筆記 05Git筆記
- Python學習筆記|Python之檔案操作Python筆記
- Python學習筆記|Python之特殊檔案Python筆記
- C++學習筆記----讀寫檔案C++筆記
- VC++學習筆記---配置檔案(一) ini檔案和propritiesC++筆記
- Linux 學習筆記--程式Linux筆記
- python學習筆記:第8天 檔案操作Python筆記
- Android學習筆記之build.gradle檔案Android筆記UIGradle
- JVM學習筆記——Class類檔案解讀JVM筆記
- Laravel 學習筆記一: 專案框架和配置檔案Laravel筆記框架
- makefile檔案案例
- Linux系統檔案學習內容多嗎?linux系統命令Linux
- 說區塊鏈-學習筆記區塊鏈筆記
- Python學習筆記 - 多程式Python筆記
- 多項式學習筆記筆記
- Linux基礎學習-Docker學習筆記LinuxDocker筆記
- 【PB案例學習筆記】-04檔案瀏覽器筆記瀏覽器
- 【Linux學習筆記】reboot命令Linux筆記boot
- Linux 學習筆記--程式管理Linux筆記
- Linux學習之檔案操作Linux
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- linux學習筆記---一些命令學習Linux筆記
- Python零基礎學習筆記(三十)——讀檔案Python筆記
- linux學習筆記-day5Linux筆記
- 基礎 IO (Linux學習筆記)Linux筆記