標籤:linux vim makefile
前言
一直都對Linux和Vim情有獨鐘,其實windows也很不錯,因為工作上難免有些情況只能使用windows進行開發,包括有些API或者SDK都只有windows版本,只是用Linux的時候就感覺和電腦特別親近的感覺,哈哈哈,誇張而言。
至於Vim(這裡暫且不討論vim和emacs誰更好的問題,這個是哲學問題),對比起大多數人估計都習慣使用IDE進行編程,使用vim確實難度會大很多,所以,如果不是專業的開發人員,其實也沒有必要使用vim編程,不過有時候想,如果當年大學的編程課教的不是使用IDE編程而是文字編輯器編程,估計對於很多熱愛開發的人員來說,效率會高很多,因為用IDE總有很多你完全不知道為什麼都錯誤出現,我也是經過了很長一段時間的積累,加上看了《C++物件模型》和使用了Vim編程之後才慢慢理解了曾經“無厘頭”的錯誤。
最重要的是,一旦精通了Linux下使用Vim編程,從此那些關於連結庫和標頭檔連結的問題都會迎刃而解。
Makefile是什麼
相信如果不用IDE編程的話,必須要會的就是如何使用Makefile去串連標頭檔、庫檔案和源檔案。
網上有像《Makefile經典教程》這樣的教程,不過話說,我自己也看到不少於三遍也沒有完全記住,但實際使用中,其實也不是全部都用得上,即使是在大型的團隊合作項目中,同時使用多個我提供的Makefile模板也足夠應付了,那些進階的功能(如變數、函數使用)更多的是應用於編寫SDK或API或者函數庫中才會使用到。
我的Makefile模板
#Makefile fileDIR_INC = ./include #所有標頭檔放到此處DIR_SRC = ./scr #所有源檔案放到此處DIR_OBJ = ./obj #所有中介軟體檔案放到此處DIR_BIN = ./bin #產生的檔案放到此處DIR_3RD = ./3party #第三方庫的標頭檔放到此處DIR_LIB = ./lib #第三方庫檔案的連結庫放到此處SRC = $(wildcard ${DIR_SRC}/*.cc)OBJ = $(patsubst %.cc,${DIR_OBJ}/%.o,$(notdir ${SRC}))TARGET = mian #產生的檔案名稱BIN_TARGET = ${DIR_BIN}/${TARGET}CC = g++CXXFLAGS = -g -Wall -I${DIR_INC} -I${DIR_3RD}LDFLAGS = -L${DIR_LIB}LIBS= -lopencv_core -lopencv_highgui #連結庫模組,使用空格隔開多個檔案${BIN_TARGET} : ${OBJ} $(CC) $(OBJ) -o [email protected] $(LDFLAGS) $(LIBS)${DIR_OBJ}/%.O:${DIR_SRC}/%.cc $(CC) $(CXXFLAGS) -c $< -o [email protected].phony:cleanclean: find ${DIR_OBJ} -name *.o -exec rm -rf {}\;
一些注意事項
- 整個Makefile檔案都不要使用空格鍵最為安全,你看到的所有空格其實是有Tab鍵產生的,一旦使用了空格鍵,檔案是預設空格是編譯語言的其中一部分,從而會導致錯誤的出現。包括在編寫注釋的時候,也不要用空格,我就是因為圖方便用了空格對齊所有的注釋,結果,浪費了一個半小時排查原因。
- 使用-l串連庫模組時,不要直接寫檔案名稱,要把檔案名稱中開頭的lib去掉。例如,源檔案是libopencv_core.so,在串連時使用-lopencv_core.
- 多個串連模組,使用空格分開。
轉載請註明出處:http://blog.csdn.net/luoyun614/article/details/42806875
Vim編程下自創Makefile模板