2015-08-09 70 views
0

我想知道我使用的推斷規則有什麼錯我的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 [email protected] 

的錯誤,我得到:

make: *** No rule to make target `ignore.exe', needed by `base'. Stop. 

當然沒有這樣的一個規則,但不應該make假設ignore隱藏在%

回答

1

首先,你的錯誤信息與你的makefile不匹配(你的makefile中沒有任何地方是提到的目標ignore.exe)。這讓我非常謹慎,可能在您正在運行的內容與您向我們展示的內容之間存在其他相關差異。

無論如何,像%: ./../source/%.cu這樣的規則將與目標相匹配,當且僅當存在與模式匹配的先決條件時。所以如果你的目標是ignore.exe而目標模式是%這意味着前提條件中的%也會擴展到ignore.exe。所以make會尋找先決條件./../source/ignore.exe.cu。如果該文件存在(或可以自己製作),則make將嘗試構建目標。如果它不存在並且不能創建,那麼make會忽略該規則並繼續尋找更多可能與目標相匹配的規則以及存在或可以構建前提條件的規則。

如果沒有找到,那麼你得到你所看到的錯誤(沒有規則,使目標

+0

什麼跑,什麼被證明是在'.exe'擴展之間的唯一區別。 –

+0

是的,實際上我的文件被命名爲'mandelbrot-ignore.cu'而不是'ignore.cu'。 –