繁体   English   中英

Makefile 变量替换有时会被忽略

[英]Makefile variable substitution sometimes ignored

编译启用了 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 中依赖环境变量通常不是一个好主意。 在 makefile 中显式指定值,或在调用中指定它(例如make CUDA=... )实际上是正确的方法。

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

 CUDA_BIN := $(shell echo $$CUDA_BIN)

如果环境变量已被导出,则只能在 Makefile 中使用它们。 即如果你这样做:

export CUDA_BIN=/usr/local/cuda/bin

更基本的命令CUDA_BIN=/usr/local/cuda/bin将导致命令echo $CUDA_BIN的正确结果,但不能确保 Makefile 可以访问该变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM