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

问题描述 投票:0回答:1

我有一个旧的 Windows 设置,在使用

Android.mk
文件构建 Android 应用程序期间,它成功运行了 shell 命令,如

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

不幸的是,在全新安装的 Windows 11 和 Android Studio 上,

cp
命令不起作用。它不会产生任何错误,也不会中止构建过程。它只是默默地不将指定文件复制到指定位置。我尝试打印命令的源/目标参数,它们看起来是正确的。

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

android makefile
1个回答
0
投票

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

在 Linux 和 MacOS 等 POSIX 系统上,它使用

/bin/sh
。在 Windows 上,默认情况下(但可以在编译 GNU make 时修改)GNU make 将首先在您的 PATH 中查找
sh
,如果找不到,它将使用
cmd.exe
.

GNU Make 永远不会在 Windows 上使用 Powershell(除非您通过设置

SHELL
makefile 变量明确告诉它)。

很遗憾,您没有为我们提供足够的信息来帮助您:您需要向我们提供

$(shell ...)
出现位置的上下文。它是否像您拥有的那样单独位于 makefile 中?我很确定情况并非如此。所以,它必须在食谱中,要了解我们需要查看食谱的行为。

$(shell ...)
函数通常不是您想要在食谱中使用的东西。一个食谱已经already 在 shell 中运行,所以它是多余的,并且它有你意想不到的奇怪行为。
$(shell ...)
的工作方式是它运行命令并 expands to stdout。它不显示标准输出。此外,
$(shell ...)
中的失败不被视为配方失败:退出代码被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.