Makefile «нет такого файла или каталога. остановить » с помощью cygwin64 в Windows

#android #makefile #linux-kernel #kernel-module

#Android #makefile #linux-ядро #kernel-module

Вопрос:

Я пытаюсь скомпилировать определенный модуль ядра Android на моем ПК с Windows 10, используя Android NDK.

Я попытался собрать его, используя следующий Makefile:

 VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION =

obj-m := test.o

PWD := $(shell pwd)

default:
    $(MAKE) ARCH=arm64 CROSS_COMPILE=/home/AndroidNDK/android-ndk-r21d/toolchains/aarch64-linux- android-4.9/bin/aarch64-linux-android- -C  $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
    $(MAKE) -C $(KERNEL_PATH) SUBDIRS=$(PWD) clean
  

Но продолжайте получать эту ошибку:

 make ARCH=arm64 CROSS_COMPILE=/home/AndroidNDK/android-ndk-r21d/toolchains/aarch64-linux-android-4.9/bin/aarch64-linux-android- -C   SUBDIRS=/cygdrive/c/Project  modules
make[1]: *** SUBDIRS=/cygdrive/c/Project: No such file or directory.  Stop.
make: *** [Makefile:11: default] Error 2
  
  • Я взял Makefile с github и немного изменил его.
  • Исходный файл модуля называется test.c

Есть идеи, почему я получаю эту ошибку?

Ответ №1:

Совершенно очевидно, почему вы получаете эту ошибку. Посмотрите на команду, которая выполняется make:

 make ARCH=arm64 CROSS_COMPILE=... -C   SUBDIRS=/cygdrive/c/Project  modules
  

Обратите внимание, что строка SUBDIRS=/cygdrive/c/Project идет после -C параметра. Какой -C вариант? Проверьте GNU make manual, чтобы обнаружить, что в нем указан каталог, который make должен изменить перед запуском.

Итак, вы говорите make «изменить на каталог с именем SUBDIRS=/cygdrive/c/Project «, и, конечно, этот каталог не существует, поэтому вы получаете эту ошибку.

Итак, почему ваша командная строка такая? Посмотрите на правило, которое вы написали:

 default:
        $(MAKE) ARCH=arm64 CROSS_COMPILE=... -C  $(KERNEL_DIR) SUBDIRS=$(PWD) modules
  

Итак, после -C должно быть значение переменной KERNEL_DIR .

Однако в вашем makefile вы не определили переменную KERNEL_DIR , поэтому, когда make расширяет ее, она расширяется до пустой строки.

Комментарии:

1. Кроме того, это должно быть M , а не дочерние файлы .