繁体   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