[英]Specifying input sources (instead of intermediates) as prerequisites to target in Makefile
在閱讀了《 使用GNU Make管理項目》的前幾章之后,我想到了我的第一個平凡的Makefile。
all: libTest.a
libTest.a : Test.o MWE.o Test.dlink.o MWE.dlink.o
nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -lib -o $@ $^
%.a : %.dlink.o %.o
nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -lib -o $@ $^
%.dlink.o : %.o
nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -dlink -o $@ $<
%.o: %.cu
nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -dc -o $@ -c $<
clean:
rm -f *.o *.dlink.o
這個Makefile的作品,但我真的不喜歡指定的中間文件Test.o MWE.o Test.dlink.o MWE.dlink.o
作為先決條件libTest
。 我寧願指定輸入文件Test.cu
和MWE.cu
或更好的通配符%.u
。
只要你可以准備一個命令(或命令集)來構建libTest.a
從Test.cu
和MWE.cu
,你可以只是一個規則:
libTest.a: Test.cu MWE.cu
list
of
commands
needed
to
build
the
library
但這不是使用make
的合理方法。 什么你在原來的問題告訴我們是make
的做事方式-ish。 但是,如果這就是您的整個Makefile
則規則%.a : %.dlink.o %.o
在這里是多余的。
您可以做的是自動生成這些先決條件:
SOURCES=Test.cu MWE.cu
libTest.a: $(SOURCES:%.cu=%.o) $(SOURCES:%.cu=%.dlink.o)
nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -lib -o $@ $^
如果您不希望不手動將文件名添加到SOURCES
而是希望使用當前目錄中所有可用的*.cu
文件,請將SOURCES
分配替換為:
SOURCES=$(wildcard *.cu)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.