日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

makefile多目录的.c 格式.cpp混合编译

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 makefile多目录的.c 格式.cpp混合编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/yangbingzhou/article/details/50218315

[cpp] view plaincopyprint?
  • #??
  • #?c.cpp混合編譯的makefile模板??
  • #??
  • #??
  • ??
  • ??
  • BIN?=?test.exe??
  • CC?=?gcc??
  • CPP?=?g++??
  • #這里只加入庫頭文件路徑及庫路徑??
  • INCS?=?-I"c:/mingw/include"??
  • LIBS?=?-L"c:/mingw/lib"??
  • SUBDIRS?=??
  • #生成依賴信息時的搜索目錄,比如到下列目錄中搜索一個依賴文件(比如.h文件),例如?-I"./***/"?-I"./base/"??
  • DEFINC?=??
  • #給INCS加上依賴搜索路徑,分開寫可能會產生不一致情況,而且繁瑣??
  • INCS?+=?$(DEFINC)??
  • #??
  • #??
  • #maintest.c?tree/rbtree.c??多了子目錄,那就直接添加?目錄/*.c即可???所有的源文件--??.c文件列表??
  • CSRCS?=?$(wildcard?./*.c)??
  • CPPSRCS?=?$(wildcard?./*.cpp)??
  • #SRCS?+=?$(wildcard?./../base/*.c)??
  • #SRCS?+=?$(wildcard?./*.c?./src/*.c?./src/base/*.c?./src/base/tree/*.c?./src/mem/*.c)??
  • ??
  • #??
  • #??
  • #所有的.o文件列表??
  • COBJS?:=?$(CSRCS:.c=.o)??
  • CPPOBJS?:=?$(CPPSRCS:.cpp=.o)??
  • #??
  • #生成依賴信息?-MM是只生成自己的頭文件信息,-M?包含了標準庫頭文件信息。??
  • #-MT?或?-MQ都可以改變生成的依賴??xxx.o:src/xxx.h?為?src/xxx.o:src/xxx.h?當然。前面的?src/xxx.o需自己指定??
  • #格式為?-MM?輸入.c或.cpp??查找依賴路徑??-MT或-MQ??生成規則,比如src/xxx.o??
  • MAKEDEPEND?=?gcc?-MM?-MT??
  • CFLAGS?+=?$(INCS)??
  • CFLAGS?+=?-O2?-Wall?-fomit-frame-pointer?-g?-ansi??
  • CPPFLAGS?+=?$(INCS)??
  • CPPFLAGS?+=?-O2?-Wall?-g??
  • #-g?生成調試信息??
  • #-pedantic參數與-ansi一起使用?會自動拒絕編譯非ANSI程序??
  • #-fomit-frame-pointer?去除函數框架??
  • #-Wmissing-prototypes?-Wstrict-prototypes?檢查函數原型??
  • #針對每個.c文件的.d依賴文件列表??
  • CDEF?=?$(CSRCS:.c=.d)??
  • CPPDEF?=?$(CPPSRCS:.cpp=.d)??
  • ??
  • all:$(BIN)??
  • ??
  • #生成.o的對自己目錄中.h?.c的依賴信息.d文件到.c所在的路徑中??
  • #$(DEF)文件是.d文件名列表(含目錄),比如tree.d?匹配成功那么%就是tree,然后在嘗試%.c,如果成功。則執行規則??
  • #?$(<:.c=.o)是獲取此.c文件的名字(含路徑),然后變為.o比如?src/xxx.o。?以形成如下??
  • #?src/xxx.o?:?src/xxx.c?***.h??***.h??最前面!!注意。????
  • #?此做法是每個.d都和生成他的.c在一個目錄里,所以需要這樣做。??
  • #?$(<:.c=.o)之類的?。此時的<相當于變量$<?。切記??
  • #?:?:?:??含義同下??
  • $(CDEF)?:?%.d?:?%.c??
  • ????$(MAKEDEPEND)?$(<:.c=.o)?$<?$(DEFINC)?>?$@??
  • $(CPPDEF)?:?%.d?:?%.cpp??
  • ????$(MAKEDEPEND)?$(<:.cpp=.o)?$<?$(DEFINC)?>?$@??
  • ??
  • #先刪除依賴信息??
  • #重新生成依賴信息??
  • #這里出現了一個?$(MAKE)?沒有定義的變量。這個變量是由?Make?自己定義的,它的值即為自己的位置,方便?Make?遞歸調用自己。??
  • depend:??
  • ????rm?$(CDEF)??
  • ????rm?$(CPPDEF)??
  • ????$(MAKE)?$(CDEF)??
  • ????$(MAKE)?$(CPPDEF)??
  • ??
  • #$(OBJS):%.o?:%.c??先用$(OBJS)中的一項,比如foo.o:?%.o?:?%.c??含義為:試著用%.o匹配foo.o。如果成功%就等于foo。如果不成功,??
  • #?Make就會警告,然后。給foo.o添加依賴文件foo.c(用foo替換了%.c里的%)??
  • #?也可以不要下面的這個生成規則,因為下面的?include?$(DEF)??就隱含了。此處為了明了,易懂。故留著??
  • $(COBJS)?:?%.o:?%.c??
  • ????$(CC)?-c?$<?-o?$@?$(CFLAGS)??
  • $(CPPOBJS)?:?%.o:?%.cpp??
  • ????$(CPP)?-c?$<?-o?$@?$(CPPFLAGS)??
  • ??
  • #?$@--目標文件,$^--所有的依賴文件,$<--第一個依賴文件。每次$<?$@?代表的值就是列表中的??
  • #??
  • $(BIN)?:?$(COBJS)?$(CPPOBJS)??
  • ????$(CC)?-o?$(BIN)?$(COBJS)?$(CPPOBJS)?$(LIBS)??
  • ????rm?$(COBJS)??
  • ????rm?$(CPPOBJS)??
  • ????rm?$(CDEF)??
  • ????rm?$(CPPDEF)??
  • #?鏈接為最終目標??
  • ??
  • ??
  • #引入了.o文件對.c和.h的依賴情況。以后.h被修改也會重新生成,可看看.d文件內容即知道為何??
  • #引入了依賴就相當于引入了一系列的規則,因為依賴內容例如:?目錄/xxx.o:目錄/xxx.c?目錄/xxx.h?也相當于隱含的引入了生成規則??
  • #故上面不能在出現如:?$(OBJS)?:?$(DEF)之類。切記??
  • include?$(CDEF)??
  • include?$(CPPDEF)??
  • .PHONY:clean?cleanall??
  • ??
  • #清除所有目標文件以及生成的最終目標文件??
  • clean:??????????????
  • ????rm?$(BIN)?$(COBJS)?$(CPPOBJS)??
  • #rm?*.d??
  • cleanall:??
  • ????rm?$(CDEF)?$(CPPDEF)??
  • ????rm?$(BIN)?$(COBJS)?$(CPPOBJS)??

  • 轉自:http://lcinx.blog.163.com/blog/static/434942672010913291210/


    上述makefile文件使用時,生成.d文件時會出錯,因此根據自己需要,對上述文件做了修改,能夠正常使用了。

    [cpp] view plaincopyprint?
  • #??
  • #?c.cpp混合編譯的makefile模板??
  • #??
  • #??
  • ??
  • ??
  • BIN?=?./bin/libEthernet.so??
  • CROSS?=?arm-linux-??
  • CC?=?$(CROSS)gcc??
  • CPP?=?$(CROSS)g++??
  • LD?=?$(CROSS)ld??
  • #這里只加入庫頭文件路徑及庫路徑??
  • INCS?=?#-I"c:/mingw/include"??
  • LIBS?=?#-L"c:/mingw/lib"???
  • SUBDIRS?=??
  • #生成依賴信息時的搜索目錄,比如到下列目錄中搜索一個依賴文件(比如.h文件),例如?-I"./***/"?-I"./base/"??
  • DEFINC?=?-I./snap7/?-I./snap7/src/sys/?-I./snap7/src/lib/?-I./snap7/src/core/??
  • #給INCS加上依賴搜索路徑,分開寫可能會產生不一致情況,而且繁瑣??
  • INCS?+=?$(DEFINC)??
  • #??
  • #maintest.c?tree/rbtree.c??多了子目錄,那就直接添加?目錄/*.c即可???所有的源文件--??.c文件列表??
  • CSRCS?=?$(wildcard?./*.c?./snap7/*.c)??
  • CPPSRCS?=?$(wildcard?./snap7/src/sys/*.cpp?./snap7/src/lib/*.cpp?./snap7/src/core/*.cpp)??
  • #??
  • #所有的.o文件列表??
  • COBJS?:=?$(CSRCS:.c=.o)??
  • CPPOBJS?:=?$(CPPSRCS:.cpp=.o)??
  • #??
  • #生成依賴信息?-MM是只生成自己的頭文件信息,-M?包含了標準庫頭文件信息。??
  • #-MT?或?-MQ都可以改變生成的依賴??xxx.o:src/xxx.h?為?src/xxx.o:src/xxx.h?當然。前面的?src/xxx.o需自己指定??
  • #格式為?-MM?輸入.c或.cpp??查找依賴路徑??-MT或-MQ??生成規則,比如src/xxx.o??
  • #MAKEDEPEND?=?gcc?-MM?-MT??
  • CFLAGS?+=?$(INCS)??
  • CFLAGS?+=?-O2?-Wall?-g?-fPIC??
  • CPPFLAGS?+=?$(INCS)??
  • CPPFLAGS?+=?-O2?-Wall?-g?-fPIC??
  • LDFLAGS?+=?-shared?-fPIC?-lpthread?-lm?-lrt?-lstdc++??
  • ??
  • all:$(BIN)??
  • #$(OBJS):%.o?:%.c??先用$(OBJS)中的一項,比如foo.o:?%.o?:?%.c??含義為:試著用%.o匹配foo.o。如果成功%就等于foo。如果不成功,??
  • #?Make就會警告,然后。給foo.o添加依賴文件foo.c(用foo替換了%.c里的%)??
  • #?也可以不要下面的這個生成規則,因為下面的?include?$(DEF)??就隱含了。此處為了明了,易懂。故留著??
  • $(COBJS)?:?%.o:?%.c??
  • ????$(CC)?$(CFLAGS)?-c?$<?-o?$@???
  • $(CPPOBJS)?:?%.o:?%.cpp??
  • ????$(CPP)?$(CPPFLAGS)?-c?$<?-o?$@???
  • ??
  • #?$@--目標文件,$^--所有的依賴文件,$<--第一個依賴文件。每次$<?$@?代表的值就是列表中的??
  • #??
  • $(BIN)?:?$(COBJS)?$(CPPOBJS)??
  • ????$(CC)?-o?$(BIN)?$(COBJS)?$(CPPOBJS)?$(LDFLAGS)?$(LIBS)???
  • ????rm?$(COBJS)??
  • ????rm?$(CPPOBJS)??
  • #?鏈接為最終目標??
  • ??
  • ??
  • #引入了.o文件對.c和.h的依賴情況。以后.h被修改也會重新生成,可看看.d文件內容即知道為何??
  • #引入了依賴就相當于引入了一系列的規則,因為依賴內容例如:?目錄/xxx.o:目錄/xxx.c?目錄/xxx.h?也相當于隱含的引入了生成規則??
  • #故上面不能在出現如:?$(OBJS)?:?$(DEF)之類。切記??
  • .PHONY:clean?cleanall??
  • ??
  • #清除所有目標文件以及生成的最終目標文件??
  • clean:??????????????
  • ????rm?$(BIN)?#$(COBJS)?$(CPPOBJS)??
  • #rm?*.d??
  • cleanall:??
  • ????rm?$(BIN)?$(COBJS)?$(CPPOBJS)?
  • 總結

    以上是生活随笔為你收集整理的makefile多目录的.c 格式.cpp混合编译的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。