includes = -i /home/linux \
-i ./ \
-i /usr/include
#新增鏈結的標頭檔案所在目錄
ext_cc_opts = -dext_mode
rtm_cc_opts = -duse_rtmodel
#定義巨集
cflags = -o
cflags += $(ext_cc_opts)
cflags +=$(rtm_cc_opts)
#編譯器選項
srcs:=hello.c hello1.c
#編譯原始檔列表
objs := $(srcs:.c=.o)
#各個原始檔所對應的目標列表
rm = rm -f
#刪除cc = gcc
ld = gcc #選擇編譯器
.phony: all
all: do#偽目標
do : $(objs)
$(ld) -o $@ $(objs) -lm
%.o : %.c
$(cc) -c -o $@ $(cflags) $(includes) $<
clean:
$(rm) $(objs) do
-i /home/hello/include,表示將/home/hello/include目錄作為第乙個尋找標頭檔案的目錄,
尋找的順序是:/home/hello/include–>/usr/include–>/usr/local/include
-l /home/hello/lib,表示將/home/hello/lib目錄作為第乙個尋找庫檔案的目錄,
尋找的順序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
對於第三方提供的動態鏈結庫(.so),
一般將其拷貝到乙個lib目錄下(/usr/local/lib),或者使用-l來指定其所在目錄,
Makefile語法高階
迴圈條件 其他makefile基本語法 呼叫子makefile 類似函式 關鍵字有 ifeq,ifneq,ifdef,ifndef ifeq cc gcc cc o else cc o xx xx endif函式 含義 subst 字串替換函式 patsubst 模式字串替換函式 strip 去空格...
makefile高階(二) 命令
本文由導學寶 每個目標裡都可以執行shell命令,每個命令前以 tab 開頭,它不能是空格。通常情況下,你執行的命令會在輸出中顯示出來,比如 output echo hello 執行make會有如下結果 make output echo hello hello 有時我們不希望把執行的命令顯示出來,我...
C 編譯多個檔案makefile
逐步編譯 g c apcluster.cppapcluster.h 生成apcluster.o 中間檔案 g c example.cppapcluster.h 生成example.o中間檔案 g o main apcluster.o example.o makefile gnu的make很強大,它可...