首先宣告, 感謝九哥的幫助,因為從來沒寫過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)
###########################################view code#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
"
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,可以用它來管理多模組程式的編譯和鏈結,直至...