Makefile变量替换有时会被忽略

时间:2010-09-09 15:21:44

标签: compiler-construction makefile cuda

编译一个CUDA启用的aircrack-ng版本,该版本一段时间内没有被错误修复,因此需要进行一些修补以获得大多数的方式。

基本上,make无法为这一段代码找到相关的编译器(nvcc);

Relevent Makefile部分

ifeq ($(CUDA), true)
CFLAGS += -DCUDA_ENABLED

NVCC := $(CUDA_BIN)/nvcc
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include
COMMONFLAGS += $(INCLUDES) -DUNIX

NVCCFLAGS += --compiler-options -fno-strict-aliasing --host-compilation=C $(COMMONFLAGS)

# Change this only if you have COMPUTE > 1.0
NVCCFLAGS += -maxrregcount 12

# Enable this for extra compiler and as output
#NVCCFLAGS += --ptxas-options "-v" --verbose

LIBSSL += -L$(CUDA_INSTALL_PATH)/lib -L$(CUDA_INSTALL_PATH)/lib64 -lcuda -lcudart

%.o : %.cu   
    $(NVCC) $(NVCCFLAGS) $(SMVERSIONFLAGS) -o $@ -c $<
endif

相关输出

/nvcc --compiler-options -fno-strict-aliasing --host-compilation=C -I. -I/include -DUNIX -maxrregcount 12  -o cudacrypto.o -c cudacrypto.cu
make[1]: /nvcc: Command not found
make[1]: *** [cudacrypto.o] Error 127
make[1]: Leaving directory `/home/bolster/src/aircrack-ng-cuda/src'
make: *** [install] Error 2

正如您所看到的,看起来make正在删除环境变量'CUDA_BIN'。

echo $CUDA_BIN

的输出
/usr/local/cuda/bin

which nvcc

的输出
/usr/local/cuda/bin/nvcc

我不是任何一个创造大师,所以如果我明显地做了一件明显不对的事,请原谅我。

在尝试使用完整路径对nvcc标志进行硬编码之后,该部分进行编译,但是当涉及到加密部分(涉及libssl)时,它无法找到必要的库,并且以与上述类似的方式不会替换' CUDA_INSTALL_PATH',即使它在环境中,也表示发生了奇怪的事情。

1 个答案:

答案 0 :(得分:1)

在makefile中依赖环境变量通常不是一个好主意。在makefile中显式显示值,或在调用中指定值(例如make CUDA=...)实际上是正确的方法。

如果您仍想使用环境中的值,我不知道为什么您的makefile不起作用,但您可以试试这个:

 CUDA_BIN := $(shell echo $$CUDA_BIN)