【问题标题】:Inferred rules in makefilemakefile 中的推断规则
【发布时间】:2015-08-09 13:15:54
【问题描述】:

我想知道我使用推断规则的 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隐藏在%中吗?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    首先,您的错误消息与您的makefile 不匹配(您的makefile 中没有提到目标ignore.exe)。这让我很谨慎,您正在运行的内容与您向我们展示的内容之间可能存在其他相关差异。

    无论如何,像%: ./../source/%.cu 这样的规则将匹配目标当且仅当存在与模式匹配的先决条件时。因此,如果您的目标是 ignore.exe 并且目标模式是 %,这意味着先决条件中的 % 也将扩展为 ignore.exe。所以 make 会寻找一个先决条件./../source/ignore.exe.cu。如果该文件存在(或可以自己制作),则 make 将尝试构建目标。如果它不存在且无法创建,则 make 将忽略该规则并继续寻找更多可能与目标匹配的规则以及先决条件存在或可以构建的位置。

    如果没有找到,那么你会看到你看到的错误(No rule to make target

    【讨论】:

    • 运行和显示的唯一区别在于 .exe 扩展。
    • 是的,实际上我的文件名为 mandelbrot-ignore.cu 而不是 ignore.cu
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2013-02-21
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多