亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

makefile不同的編譯器生成多個中間文件

2019-11-14 09:31:07
字體:
來源:轉載
供稿:網友

makefile不同的代碼進行不同的編譯,比如cuda代碼中想將cpp代碼和cu代碼分開分別編譯成.o文件,再將.o文件編譯成一個哭文件或者可執行文件,這時可能cpp和cuda的編譯器不一樣,那么就不能夠使用自動推導,當然,也可以將兩個編譯器組合成一個編譯器,讓系統根據代碼自己去選擇相應的編譯器,這里將的是如果想分開的話,應該怎么做?

首先,假設這里有3個cpp文件,2個cu文件:

a.cpp ,b.cpp,d.cppkernel1.cu,kernel2.cu

首先獲取相應的文件名稱以及去掉后綴后的文件名:

SRC :=$(wildcard *.cpp)OBJ :=$(SRC:%.cpp=%.o)NAM :=$(foreach src,$(SRC),$(eval NAM += $$(shell basename $(src) .cpp));)

然后將不同的代碼進行編譯

gen_cpp: $(foreach n, $(NAM), $(EXEC) $(HOST_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o ${n}.o -c $(n).cpp;)

上面的代碼就會自動生成相應的.o文件 同樣,對cu代碼:

SRC_CU :=$(wildcard *.cu)OBJ_CU :=$(SRC_CU:%.cu=%.o)NAM_CU :=$(foreach src,$(SRC_CU),$(eval NAM_CU += $$(shell basename $(src) .cu));)#下面這句和上面這句一樣,不同的是,使用的是makefile自己的basename變量:#shell的basename是去掉路徑的前綴,一般結合pwd可以用來獲取目錄名,在后面加上.cu可以再去掉后綴#而makefile中的basename是用來去掉后綴的$(foreach src,$(SRC_CU),$(eval NAM_CU += $$(basename $(src)));)

然后將不同的代碼進行編譯

gen_cu: $(foreach n, $(NAM_CU), $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) -o ${n}.o -c $(n).cu;)

最后,完整的代碼:

.PHONY : gen_cpp gen_cu#注意,這里gen_cpp,gen_cu一定要先放在build的前面,因為build會依賴這兩項生成的中間文件all: gen_cpp gen_cu buildSRC :=$(wildcard *.cpp)OBJ :=$(SRC:%.cpp=%.o)NAM :=$(foreach src,$(SRC),$(eval NAM += $$(shell basename $(src) .cpp));)gen_cpp: $(foreach n, $(NAM), $(EXEC) $(HOST_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o ${n}.o -c $(n).cpp;)SRC_CU :=$(wildcard *.cu)OBJ_CU :=$(SRC_CU:%.cu=%.o)NAM_CU :=$(foreach src,$(SRC_CU),$(eval NAM_CU += $$(shell basename $(src) .cu));)gen_cu: $(foreach n, $(NAM_CU), $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) -o ${n}.o -c $(n).cu;)build : target.sotarget:$(gen_cpp) $(gen_cu) $(ALL_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ -shared $^

還有一種更簡單的模式規則可以使用,相比上面,下面代碼的好處是,由于需要生成的目標是實際存在的,因此,如果編譯時間較長時,上面這種方法由于是偽目標,每次都需要重新進行編譯,會很耗時,而下面這種,只會編譯更改后的源文件:

#注意,這里gen_cpp,gen_cu一定要先放在build的前面,因為build會依賴這兩項生成的中間文件SRC :=$(wildcard *.cpp)OBJ :=$(SRC:%.cpp=%.o)SRC_CU :=$(wildcard *.cu)OBJ_CU :=$(SRC_CU:%.cu=%.o)all: $(OBJ_CU) $(OBJ) target.so$(OBJ_CU):%.o:%.cu $(NVCC_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^$(OBJ):%.o:%.cpp $(HOST_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^target.so:$(OBJ_CU) $(OBJ) $(ALL_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^

注意如果將上面的

$(OBJ_CU):%.o:%.cu $(NVCC_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^$(OBJ):%.o:%.cpp $(HOST_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^

更改成

$(OBJ_CU):$(SRC_CU) $(NVCC_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^$(OBJ):$(SRC) $(HOST_COMPLIER) $(INCLUDES) $(ALL_CCFLAGS) -o $@ $^

看似是正確的,實際上會報錯


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩精品在线观看| 97视频在线观看亚洲| 成人免费观看49www在线观看| 日韩福利伦理影院免费| 日本a级片电影一区二区| 日韩在线免费观看视频| 中文字幕日韩av| 欧美日韩国产一区二区| 美女性感视频久久久| 亚洲美女久久久| 国产精品羞羞答答| 国产成人精品网站| 亚洲激情小视频| 青草青草久热精品视频在线观看| 国产精品久久久久久久久免费看| 国产精品视频区| 91久久国产综合久久91精品网站| 热久久这里只有精品| 奇米四色中文综合久久| 日韩国产欧美精品一区二区三区| 国产精品久久久久久久久久新婚| 美日韩精品免费观看视频| 人人澡人人澡人人看欧美| 在线观看中文字幕亚洲| 国产精品久久久久久久电影| 欧美黑人极品猛少妇色xxxxx| 亚洲欧美三级伦理| 色偷偷偷亚洲综合网另类| 亚洲欧美自拍一区| 成人av在线亚洲| 久久久久久这里只有精品| 久久香蕉国产线看观看av| 亚洲激情成人网| 日韩电影视频免费| 中文字幕在线看视频国产欧美| 欧美成人午夜视频| 日本午夜在线亚洲.国产| 91精品国产99| 日韩三级成人av网| 久久久久免费视频| 欧美区二区三区| 国产一区二区丝袜高跟鞋图片| 国产日韩欧美在线观看| 久久影视三级福利片| 亚洲bt欧美bt日本bt| 亚洲人成网站免费播放| 欧美日韩爱爱视频| 色婷婷成人综合| 欧美一级成年大片在线观看| 欧美性在线视频| 亚洲精品之草原avav久久| 日韩激情av在线免费观看| 亚洲视频精品在线| 日韩在线中文视频| 日本亚洲精品在线观看| 成人免费看片视频| 亚洲新中文字幕| 91在线|亚洲| 国产精品视频久久| 538国产精品视频一区二区| 欧美日韩亚洲网| 成人av电影天堂| 亚洲欧美国产一区二区三区| 欧美精品九九久久| 国产suv精品一区二区三区88区| 亚洲一区亚洲二区| 国产一区二区黄| 91社影院在线观看| 欧美色xxxx| 国产精品麻豆va在线播放| 欧美视频第一页| 日韩亚洲欧美中文高清在线| 日韩av在线一区二区| 2018中文字幕一区二区三区| 成人午夜黄色影院| 欧美性猛交xxxx富婆弯腰| 97在线免费观看视频| 日韩av免费在线| 丁香五六月婷婷久久激情| 久热爱精品视频线路一| 亚洲精品国产综合久久| 97在线精品国自产拍中文| 欧美一区二区三区四区在线| 亚洲欧洲在线观看| 国产精品久久久一区| 久久伊人精品一区二区三区| 国产精品日韩在线一区| 亚洲bt天天射| 日韩美女免费观看| 日韩美女毛茸茸| 国产精品日韩在线| 国内精品小视频| 成人黄色av免费在线观看| 国产精品久久久久久久久久久久久久| 亚洲美女又黄又爽在线观看| 97香蕉久久夜色精品国产| 精品国产一区二区三区在线观看| 欧美成年人视频网站欧美| 国产精品一区二区久久久| 日韩电视剧在线观看免费网站| 国产精品久久电影观看| 欧美日韩在线一区| 91精品国产免费久久久久久| 国产精品福利在线观看网址| 国产亚洲欧洲高清一区| 久久久久久欧美| 日韩电影中文 亚洲精品乱码| 精品久久久久久久久久久久久| 性欧美长视频免费观看不卡| 韩剧1988免费观看全集| 欧美精品videosex极品1| 精品视频中文字幕| 国产精品美女久久久免费| 91综合免费在线| 国产精品久久久久久久久免费| 色综合天天狠天天透天天伊人| 色婷婷av一区二区三区在线观看| 91精品国产色综合久久不卡98口| 68精品国产免费久久久久久婷婷| 亚洲乱码国产乱码精品精天堂| 91免费看片网站| 亚洲精品在线观看www| 国内免费精品永久在线视频| 日韩最新在线视频| 欧美激情欧美激情在线五月| 国产精品吹潮在线观看| 欧美激情高清视频| 在线观看国产精品淫| 国产精品第3页| 亚洲人成亚洲人成在线观看| 亚洲自拍欧美另类| 久久视频免费观看| 欧美做爰性生交视频| 91网在线免费观看| 亚洲人成电影网站色www| 久久在线观看视频| 久久久影视精品| 欧美极品少妇xxxxⅹ喷水| 久久人人爽人人爽人人片av高请| 久久99久国产精品黄毛片入口| 亚洲精品视频二区| 亚洲摸下面视频| 国产精品网站视频| 亚洲欧美日韩在线高清直播| 日韩av网址在线| 国产91热爆ts人妖在线| 欧美激情在线视频二区| 国产精品久久在线观看| 日韩性生活视频| 午夜精品久久久99热福利| 中文字幕久热精品视频在线| 国产精品一二三视频| 欧美高清性猛交| 一区二区三区四区精品| 亚洲毛片在线看| 久久综合色影院| 久久久精品999| 综合久久五月天| 国产精品视频最多的网站| 欧美三级欧美成人高清www| 国产精品久久999| 中文字幕在线亚洲| 国产欧美精品一区二区三区-老狼| 国产精品∨欧美精品v日韩精品|