Makefile 变量替换有时会被忽略

问题描述 投票:0回答:2

编译一个支持 CUDA 的 Aircrack-ng 版本,该版本已经有一段时间没有修复错误了,因此需要一些修补才能实现“大部分”的目标。 基本上,对于这一段代码,make找不到相关的编译器(

nvcc

);


相关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

相关Make输出

/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” ,即使它在环境中,这表明正在发生一些奇怪的事情。

makefile cuda
2个回答
1
投票
make CUDA=...

)实际上是正确的方法。


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

CUDA_BIN := $(shell echo $$CUDA_BIN)



0
投票

export CUDA_BIN=/usr/local/cuda/bin

更基本的命令
CUDA_BIN=/usr/local/cuda/bin

将导致正确的结果 对于命令

echo $CUDA_BIN
但不能确保 Makefile 可以访问变量
    

© www.soinside.com 2019 - 2024. All rights reserved.