我想知道我的makefile在使用推断规则时出了什么问题:
nvcc=/usr/local/cuda-6.5/bin/nvcc
opts="-O3 -arch=sm_35 -rdc=true -lcudadevrt -Xcompiler -fopenmp -lpng"
base: ignore dynamic predict
%: ./../source/%.cu
$(nvcc) $> $(opts) -o $@
我得到的错误:
make: *** No rule to make target `ignore.exe', needed by `base'. Stop.
当然没有这样的规则,但不应该make
假设ignore
隐藏%
?
答案 0 :(得分:1)
首先,您的错误消息与您的makefile不匹配(makefile中没有提到的目标ignore.exe
)。这让我很谨慎,你正在运行的东西和你向我们展示的东西之间可能存在其他相关的差异。
在任何情况下,%: ./../source/%.cu
这样的规则将匹配目标,当且仅当存在与模式匹配的先决条件时。因此,如果您的目标是ignore.exe
且目标模式为%
,则意味着先决条件中的%
也将扩展为ignore.exe
。因此,make将寻找先决条件./../source/ignore.exe.cu
。如果该文件存在(或者可以自己创建),那么make将尝试构建目标。如果它不存在且无法创建,那么make将忽略该规则并继续寻找可能与目标匹配的规则以及先决条件存在或可以构建的位置。
如果找不到,则会出现您看到的错误(没有规则来制作目标)