Подстановка переменных в Makefile иногда игнорируется - PullRequest
1 голос
/ 09 сентября 2010

Компиляция версии aircrack-ng с поддержкой CUDA, которая не была исправлена ​​некоторое время назад, поэтому потребовалось немного исправлений, чтобы получить большую часть пути.

По сути, 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, даже если он находится в среде, что указывает на то, что происходит что-то странное.

1 Ответ

1 голос
/ 09 сентября 2010

Обычно не стоит полагаться на переменные среды в make-файле.Делать значение явным в make-файле или указывать его в вызове (например, make CUDA=...) на самом деле правильный путь.

Если вы все еще хотите использовать значение из среды, я не будузнаю, почему ваш make-файл не работает, но вы можете попробовать это:

 CUDA_BIN := $(shell echo $$CUDA_BIN)
...