在 Windows 上构建 Android.mk 无法正确执行 $(shell cp)



我有一个旧的Windows设置,在用Android.mk文件构建Android应用程序时,它成功地运行shell命令,如

$(shell cp $(LOCAL_SRC_FILES) $(TARGET_OUT)/somefile.txt)

不幸的是,在Windows 11和Android Studio的新安装中,cp命令不起作用。它不会产生任何错误,不会中止构建过程。它只是不把指定的文件复制到指定的位置。我试着打印命令的source/destination参数,它们看起来是正确的。

有没有其他方法从Android.mk的代码复制文件?

GNU make不使用您调用它的shell(如果它这样做,每个使用不同shell的人都不能使用您的makefile)。

在POSIX系统如Linux和MacOS上,它使用/bin/sh。在Windows上,默认情况下(但这可以在编译GNU make时修改),GNU make将首先在您的PATH上查找sh,如果没有找到,它将使用cmd.exe

GNU Make永远不会在Windows上使用Powershell(除非你通过设置SHELLmakefile变量来明确告诉它)。

不幸的是,你没有提供足够的信息让我们帮助你:你需要给我们$(shell ...)出现的地方的背景。它是否像您所看到的那样,在makefile中单独存在?我很确定事实并非如此。因此,它必须在配方中,为了理解其行为,我们需要查看配方。

$(shell ...)函数通常不是您想在菜谱中使用的东西。一个recipe已经在shell中运行了,所以它是多余的,并且它有一些你意想不到的奇怪行为。$(shell ...)的工作方式是,它运行命令并将展开为标准输出。它不显示标准输出。同样,$(shell ...)中的失败不被认为是配方的失败:退出代码被忽略。

最新更新