gpt4 book ai didi

windows - `echo.` Windows 上生成失败

转载 作者:可可西里 更新时间:2023-11-01 14:50:19 24 4
gpt4 key购买 nike

背景

我正在尝试编写一个半可移植 Makefile,它将在没有 MinGW 或 Cygwin 的 Windows 上使用。因此,我几乎不得不坚持使用 Windows 提供的标准命令。我知道 UnxUtils,但我想尽可能避免使用它们。此外,如果可以的话,我想避免编写任何特殊的批处理脚本。该解决方案将由不太熟悉 Linux、Windows 或命令行构建系统的人员在许多不同的计算机上使用,因此环境路径无法依赖,并且无法进行其他安装。该解决方案将取代现有系统,该系统严重缺乏一些接近必要性的更高级的 make 系统功能,因此我试图通过避免安装任何新软件来尽量减少更改的影响。

问题

我遇到的问题与 make 如何解释用作规则一部分的 shell 命令有关。我只是想以一种也可以作为一些不同规则的一部分重定向到文件的方式 echo 空白行。在 Windows 中,回显空白行的唯一方法是在回显命令后立即添加 .,不带任何空格:echo.。但是,当在规则中作为一行提供时,它会导致问题。

some_rule :
@echo.
@echo Text going to file > someFile.txt
@echo. >> someFile.txt
@echo Other text going to a file >> someFile.txt

在提供的示例中,第一行 @echo. 和第三行 @echo. >> someFile.txt,导致错误:

process_begin: CreateProcess(NULL, echo., ...) failed.

我看到一些解释说第三行不应该有一个空格,而应该是 @echo.>> someFile.txt,但是当我测试了一下。

说明

我很确定问题出在以下事实:make 实现了对隐式 shell 命令的手动查找,并且正在检测 echo. 作为命令而不是 echo。由此产生的错误是它没有在环境路径中找到 echo..exe 或等效命令或可执行文件,从而触发了上述错误。

问题

如何将命令作为 makefile 规则的一部分来输出一个空行,使其在上述情况下有效?我的实际 makefile 看起来更像下面这样,我希望替换 ECHO 变量以便它的操作更像 Linux 版本的 echo,或者替换 NEWLINE 变量以便它实际上可以以一种允许将其打印到终端或重定向到文件的方式输出一个空行。

NEWLINE=echo.
ECHO=echo
SILENT=@

some_rule :
$(SILENT)$(NEWLINE)
$(SILENT)$(ECHO) Text going to file > someFile.txt
$(SILENT)$(NEWLINE) >> someFile.txt
$(SILENT)$(ECHO) Other text going to a file >> someFile.txt

最佳答案

我编写可移植的 Makefile 和可移植的脚本。您可以在不制作另一个脚本的情况下实现您想要的。您可以只使用在任一上下文中语法正确的内容。

echo;

这将在 NMake 的 Windows 批处理文件和 unix 或 Gnu make 的 Bash 或 sh 中回显一个空行。当然,这就是您所需要的?

关于windows - `echo.` Windows 上生成失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20712307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com