Makefile編譯規則:
1. Makefile默認只檢查.c .cpp .o文件的時間戳,不會檢測.h頭文件的變化(除非明確設置了依賴關系)。
2. make可以自動推導文件以及依賴的文件,即由 $object 的 .o 文件推導相應的 .c 文件
3. Makefile支持嵌套,大項目中各功能模塊的源代碼要分開,Makefile自然也就分開;
@echo
Make執行過程中自動輸出 命令執行過程,加上 @ 的話就不會輸出命令執行過程
Makefile 偽目標:
??偽目標的目的是 在一些大型項目中,會有文件名和指令名相同的情況,添加偽目標可以防止這個問題。.PHONY : clean
clean:
-rm edit $(object)
## .PHONY 意思下面的 clean 是一個偽目標,
## rm前面的 "-" 表示 也許某些文件出現問題,但是不要管繼續做后面的事;
make工作方式
??1.讀入所有的Makefile,包括include的Makefile
??2.初始化變量
??3.推導隱晦規則
??4.為目標文件創建依賴關系
??5.根據依賴關系,決定哪些目標文件需要重新生成
??6.執行命令
Makefile 的環境變量(注意和include的區別)
??Makefile也是有環境變量的,可以用export導出當前Makefile定義的環境變量,當其他Makefile include當前Makefile的時候,就可以使用該環境變量。
編譯器總結
@ strip 刪除符號軟連接,減少可執行程序大小(gdb調試的程序不能strip,因為軟鏈接被刪除了)
@ ar 生成靜態庫
@ ld 鏈接
編譯
-c 依賴 -o 目標
編譯Flag
?? -I(大i)用來指 頭文件和靜態庫
??-L 用來指動態庫
??實例:-I(大i)
??????
Makefile-common 命名法則
#Makefile模板
CROSS_COMPILE:=編譯器-
CC:=$(CROSS_COMPILE)gcc
CXX:=$(CROSS_COMPILT)g++
#可執行程序
TARGET:=program_name ##name
TAR_DIR:=program_dir ##dir
#c、cpp編譯指令
CFLAGS:= -g -Wall
CXXFLAGS:= -g -Wall
#c/cpp頭文件
C_DIR:= ./
CXX_DIR:= ./
#c/cpp文件
C_SRC:= ./
CPP_SRC:= ./
CXX_SRC := ./
#靜態庫、靜態庫對應的頭文件
LIBS_INC_DIR:= ../contrib/lib/
LIBS_DIR =
INC_DIR:= ../contrib/ ##指所有.c和.cpp的頭文件
LIBS =
#目標
OBJS:=
INC_DIR的使用
??
OBJS的常用寫法:
??
??
浙公網安備 33010602011771號