簡體   English   中英

指定輸入源(而不是中間體)作為在Makefile中定位的先決條件

[英]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.cuMWE.cu或更好的通配符%.u

只要你可以准備一個命令(或命令集)來構建libTest.aTest.cuMWE.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM