c 的makefile檔案例項

2021-09-08 05:16:21 字數 3052 閱讀 9391

首先宣告, 感謝九哥的幫助,因為從來沒寫過makefile, 所以一直是手動編譯,

然後有一次寫了三個檔案, 需要編譯, 而我只編譯了乙個檔案, 所以一直出錯, 九哥告訴我用makefile更方便, 可以學習一下

於是我就寫了看了很多的blog, 然後向九哥要了這麼個東西, 據說還有可以生成的工具

###########################################

#makefile

for****** programs

###########################################

#inc 是你專案包含的目錄

inc=#lib是你需要鏈結的庫

lib= -lpthread

#cc是乙個變數名 可以隨便起,這裡代表你的編譯器

cc=g++#link是鏈結的程式

link=g++#ldflags是鏈結的選項

ldflags=#cc_flag 是編譯選項

cc_flag=-wall -m64

# prg=操作符過載, 這裡是目錄名字

prg=aa

# 這裡是空格隔開, 不能是逗號,需要注意

# root@corleone:/opt/code/testc++/aa# ls

# makefile mytime0.cpp mytime.h usertime0.cpp

# 上面這是目錄下的檔案, 那需要寫幾個.o的檔案呢? 就這麼寫

obj=mytime0.o usertime0.o

#當你make 後 編譯器會去找 $(***x):$(***x) 的那一行

#你會發現它下面是乙個 table縮排, table縮排 表示要執行那個命令

#然後編譯器會檢視

"-o $@

"後面的目標有沒有生成或者更新,沒有就重新編譯那個目標檔案

#比如這裡$(obj)是各種.o檔案, 那麼就會先編譯這些.o檔案 會去執行.cpp.o:下面的縮排命令

$(prg):$(obj)

$(cc) $(inc) $(lib) -o $@ $(obj)

#.suffixes表示字尾名

#這裡表示要把inc下面的所有字尾是cpp或者c的編譯成.o檔案

.suffixes: .c .o .cpp

.cpp.o:

$(cc) $(cc_flag) $(inc) -c $*.cpp -o $*.o

.prony:clean

clean:

@echo

"removing linked and compiled files......

"rm -f $(obj) $(prg)

###########################################

#makefile

for****** programs

###########################################

#inc 是你專案包含的目錄

inc=#lib是你需要鏈結的庫

lib= -lpthread

#cc是乙個變數名 可以隨便起,這裡代表你的編譯器

cc=g++#link是鏈結的程式

link=g++#ldflags是鏈結的選項

ldflags=#cc_flag 是編譯選項

cc_flag=-wall -m64

prg=threadpooltest

obj=cthreadmanage.o cthreadpool.o cthread.o cworkerthread.o threadpooltest.o

#當你make 後 編譯器會去找 $(***x):$(***x) 的那一行

#你會發現它下面是乙個 table縮排, table縮排 表示要執行那個命令

#然後編譯器會檢視

"-o $@

"後面的目標有沒有生成或者更新,沒有就重新編譯那個目標檔案

#比如這裡$(obj)是各種.o檔案, 那麼就會先編譯這些.o檔案 會去執行.cpp.o:下面的縮排命令

$(prg):$(obj)

$(cc) $(inc) $(lib) -o $@ $(obj)

#.suffixes表示字尾名

#這裡表示要把inc下面的所有字尾是cpp或者c的編譯成.o檔案

.suffixes: .c .o .cpp

.cpp.o:

$(cc) $(cc_flag) $(inc) -c $*.cpp -o $*.o

.prony:clean

clean:

@echo

"removing linked and compiled files......

"rm -f $(obj) $(prg)

###########################################

#這裡舉個複雜的例子

############################################1

先找到$(***x):$(***x)

#2 去找"

-o $@

"後面的目標有沒有生成或者更新,有就重新編譯那個目標#3

"-o $@

"後面所有的目標都好了就開始鏈結主程式了

# 編譯和鏈結都需要一些選項

#4 >>output表示輸出重定向到檔案,這樣出錯了比較好查詢

all_objs= ***1.o ../***2.o ../../***3.o

#all_libs是鏈結的庫, -l指定庫的目錄, -l指定庫的名字

#$(target): $(all_objs)

# $(link) $(ldflags) -o $@ $(all_objs) $(all_libs) $(lib) >>output

#你可以自己加一些選項 比如下面的test 你在命令列 執行 make test,他就會執行那個縮排的命令

test:

@echo

"this is test

"

view code

makefile例項(2) 多個檔案例項

1,原始檔依賴關係 defs.h command.h buffer.h main.cpp util.cpp kde.cpp command.cpp display.cpp insert.cpp search.cpp files.cpp 2,原始檔 因為這裡只是想做一下簡單測試,所以很多原始檔的內容都...

Makefile的例項講解

makefile,顧名思義,它的作用是來生成檔案的。makefile可以對源 進行管理,可以完成編譯,鏈結,執行等階段。當編寫完成後,在終端執行make命令就可以執行makefile檔案中的行為,一鍵完成編譯,鏈結,執行等操作。非常的方便。makefile有自己的檔案規則,它可以定義和使用變數,他也...

C語言makefile檔案

在軟體的工程中的原始檔是很多的,其按照型別 功能 模組分別放在若干個目錄和檔案中,哪些檔案需要編譯,那些檔案需要後編譯,那些檔案需要重新編譯,甚至進行更複雜的功能操作,這就有了我們的系統編譯的工具。在linux和unix中,有乙個強大的實用程式,叫make,可以用它來管理多模組程式的編譯和鏈結,直至...