【问题标题】:Gnu make on Windows 7 64bit?Gnu 在 Windows 7 64 位上制作?
【发布时间】:2013-06-22 09:23:36
【问题描述】:

我正在从 Windows-32 XP 迁移到 Windows 7 64 位,但我的项目构建存在问题。错误出现在第一步 - 创建目录。我尝试了 32 位和 64 位的 MinGW 和 MSYS 品牌。似乎没有人不能调用 md 命令。这是我为本地化问题而创建的非常简单的 Makefile:

all:
md C:\_test\trunk\build\win32

MinGW (mingw-w64's toolchains targetting Win64) 制作:

C:\_tmp>C:\mingw64\bin\mingw32-make.exe
md C:\_test\trunk\build\win32
process_begin: CreateProcess(NULL, md C:\_test\trunk\build\win32, ...) failed.
make (e=2): The system cannot find the file specified.
Makefile:2: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

MSYS (64bit) 制作:

C:_tmp>C:\mingw64\msys\bin\make.exe
md C:\_test\trunk\build\win32
make.exe": md: Command not found
make.exe": *** [all] Error 127

从命令行运行相同的命令没有问题:

md C:\_test\trunk\build\win32

有人可以推荐任何解决方案吗?谢谢。

【问题讨论】:

  • md 是 Windows 的 cmd shell 中的内置命令。所以,要么把它改成mkdir(然后你可能不得不使用正斜杠(无论如何总是一个好主意)),或者告诉make使用cmd作为它的shell。

标签: windows-7 64-bit gnu-make


【解决方案1】:

这个问题将在makepp 中通过使用内置命令(它们都以 & 开头)修复:

all:
            &mkdir -p C:/_test/trunk/build/win32

虽然很严重,但这可能不是您唯一的问题。看起来你的 PATH 没有通过。我不认为 make 会吞下它,可能它已经在你的 Shell 设置中消失了。

但我想知道您是否使用了 MinGW Shell,因为那时您应该使用 Unix 路径语法,就像我在上面的 Makefile sn-p 中所做的那样。即使在 {command,cmd}.{com,exe} 仅在调用 exes 时,您也需要反斜杠。为了使它可移植,makepp 提供了变量$/,它是您机器的正确斜线:

foo/bar:
            path$/to$/my$/exe some/arg

makepp 还有很多。除了 GNU make 能做的几乎所有事情之外,还有更多有用的东西,您甚至可以通过一些 Perl 编程来扩展您的 makefile。

【讨论】:

    【解决方案2】:

    当 PATH 变量具有带括号的路径时,GNU make 在 64 位 Windows 7 上似乎很困惑。 一种解决方法是指定命令的完整路径并通过 shell 调用内置命令:

    MKDIR := C:\Windows\System32\cmd.exe /C MKDIR
    
    all:
        $(MKDIR) C:\_test\trunk\build\win32
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2011-01-26
      • 2011-04-24
      • 1970-01-01
      相关资源
      最近更新 更多