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 makefileh和資料夾test-add和資料夾test-sub。
test.c makefile
【test-add】test-add.c test-add.h
【test-sub】test-sub.c test-sub.h
【test.c】
#include <stdio.h>
#include <test-add.h>
#include <test-sub.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】
#include <test-add.h>
int add(int a, int b)
{
return a+b;
}
【test-add.h】
#ifndef __TEST_ADD
int add(int a, int b);
#endif
【test-sub.c】
#include "test-sub.h"
int sub(int a, int b)
{
return a-b;
}
【test-sub.h】
#ifndef __TEST_SUB
int sub(int a, int b);
#endif
2.複習gcc指令
gcc指令可通過-I字首指定標頭檔案路徑,特別說明./代表當前路徑,../代表上一級目錄。
3.編寫makefile
請替換其中的[tab],並以程式碼倉庫中的makefile檔案為主。
# 指令編譯器和選項
CC=gcc
CFLAGS=-Wall -std=gnu99
# 目標檔案
TARGET=test
SRCS = test.c \
./test-add/test-add.c \
./test-sub/test-sub.c
INC = -I./test-add -I./test-sub
OBJS = $(SRCS:.c=.o)
$(TARGET):$(OBJS)
# @echo TARGET:$@
# @echo OBJECTS:$^
[tab]$(CC) -o $@ $^
clean:
[tab]rm -rf $(TARGET) $(OBJS)
%.o:%.c
[tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<
【具體說明】
【1】相比於單個檔案和多個檔案的makefile,通過變數INC制定了標頭檔案路徑。標頭檔案路徑之間通過空格隔開。
【2】編譯規則%.o:%.c中加入了標頭檔案引數$(CC) $(CFLAGS) $(INC) -o $@ -c $<,那麼在編譯的過程中便會出現
gcc -Wall -std=gnu99 -I./test-add -I./test-sub -o test.o -c test.c。和單個檔案和多個檔案的makefile相比增加了標頭檔案路徑引數。
【3】SRCS變數中,檔案較多時可通過“\”符號續行。
【編譯】
make clean && make
【控制檯輸出】
rm -rf test test.o ./test-add/test-add.o ./test-sub/test-sub.o
gcc -Wall -std=gnu99 -I./test-add -I./test-sub -o test.o -c test.c
gcc -Wall -std=gnu99 -I./test-add -I./test-sub -o test-add/test-add.o -c test-add/test-add.c
gcc -Wall -std=gnu99 -I./test-add -I./test-sub -o test-sub/test-sub.o -c test-sub/test-sub.c
gcc -o test test.o test-add/test-add.o test-sub/test-sub.o
從控制檯的輸出可以看出,通過make clean清除上一次的可執行檔案和目標檔案,然後依次編譯各個C檔案,在編譯的過程中制定了標頭檔案路徑,最後把3個目標檔案連結為最終可執行檔案。
相關文章
- Linux學習筆記——例說makefile 多個檔案Linux筆記
- Linux學習筆記——例說makefile 單個C檔案Linux筆記
- Linux學習筆記——例說makefile 增加系統共享庫Linux筆記
- Python模組學習:glob 檔案路徑查詢Python
- 8.13 標頭檔案剖析:標頭檔案路徑(下)
- Linux 學習筆記--環境變數與檔案查詢Linux筆記變數
- 查詢檔案位置路徑
- 【轉載】Linux查詢檔案安裝路徑Linux
- Makefile學習筆記筆記
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- 尤拉路徑學習筆記筆記
- c++筆記_標頭檔案C++筆記
- tnsnames.ora檔案的查詢路徑
- VS Code 配置或新增 C 標頭檔案路徑
- 子查詢學習筆記1筆記
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- linux和STL 常用標頭檔案及說明Linux
- Makefile例項學習
- (MySQL學習筆記)分頁查詢MySql筆記
- Linux 檔案許可權 學習筆記Linux筆記
- Linux檔案型別(學習筆記六)Linux型別筆記
- LINUX學習(四)在Linux檔案內容查詢命令Linux
- 嵌入式之Makefile學習筆記筆記
- MakeFile 學習筆記一 核心內容筆記
- Makefile 自動生成標頭檔案的依賴關係
- oracle學習筆記(十一) 高階查詢Oracle筆記
- linux 標頭檔案 作用Linux
- C/C++標頭檔案說明C++
- CMake連結庫,會檢索庫引用標頭檔案路徑
- Linux 檔案查詢Linux
- linux 查詢檔案Linux
- 查詢系統主要檔案路徑 如IE快取等快取
- Java學習筆記之檔案Java筆記
- Linux下的makefile編寫 ——陳皓《跟我一起寫Makefile》學習筆記(二)Linux筆記
- Linux 學習筆記--檔案打包與解壓縮Linux筆記
- 4、Linux入門學習筆記 檔案操作命令Linux筆記
- Linux學習筆記 檔案讀寫小細節Linux筆記