在Windows上使用cygwin64生成文件“无此类文件或目录停止”

问题描述

我正在尝试使用Android NDK在Windows 10 pc上编译某个Android内核模块。

我尝试使用以下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
  • 我从github上获取了Makefile,并做了一些改动。
  • 模块源文件称为test.c

知道为什么会出现此错误吗?

解决方法

很明显为什么会出现该错误。查看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扩展时,它会扩展为空字符串。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...