mingw32-make 的目录更改错误

Directory change error with mingw32-make

我正在 MinGW32 下构建 POCO 库 1.6.0,环境:Windows7 Ultimate 32 位,shell:MSYS。成功执行./configure.

$ ./configure
Configured for MinGW

config.make 的内容:

POCO_CONFIG = MinGW
POCO_BASE = /c/dev/poco
POCO_BUILD = /c/dev/poco
POCO_PREFIX = /usr/local
POCO_FLAGS = 
OMIT = 
export POCO_CONFIG
export POCO_BASE
export POCO_BUILD
export POCO_PREFIX
export POCO_FLAGS

启动 mingw32-make 后我得到:

$ mingw32-make --debug -w
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Updating goal targets....
 File `poco' does not exist.
   File `libexecs' does not exist.
     File `Foundation-libexec' does not exist.
    Must remake target `Foundation-libexec'.
Invoking recipe from Makefile:69 to update target `Foundation-libexec'.
mingw32-make: Entering directory `c:/dev/poco'
C:/app/MinGW/bin/mingw32-make -d -C /c/dev/poco/Foundation
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
mingw32-make: Entering an unknown directory
mingw32-make: *** /c/dev/poco/Foundation: No such file or directory.  Stop.
mingw32-make: Leaving an unknown directory
mingw32-make: *** [Foundation-libexec] Error 2
mingw32-make: Leaving directory `c:/dev/poco'

问题在

mingw32-make: Entering an unknown directory
mingw32-make: *** /c/dev/poco/Foundation: No such file or directory.  Stop.

因为/c/dev/poco/Foundation确实存在:

$ ls
CHANGELOG       LICENSE   VERSION                  build_vs110.cmd  config.make
CMakeLists.txt  MANIFEST  XML                      build_vs120.cmd  configure
CONTRIBUTORS    Makefile  build                    build_vs90.cmd   contrib
CppUnit         NEWS      build_CE_vs90.cmd        buildwin.cmd     doc
DLLVersion.rc   Net       build_vcexpress2008.cmd  cmake            libversion
Foundation      README    build_vcexpress2010.cmd  components       patches
JSON            Util      build_vs100.cmd          config.build

我正在修改 makefile 以将目录更改为其他子文件夹,不开心。似乎有什么东西阻止 mingw32-make 更改目录。也可以确认

cd /c/dev/poco/Foundation

工作正常。

make试过,结果是一样的:

$ make --debug -w
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Updating goal targets....
 File `poco' does not exist.
   File `libexecs' does not exist.
     File `Foundation-libexec' does not exist.
    Must remake target `Foundation-libexec'.
Invoking recipe from Makefile:69 to update target `Foundation-libexec'.
make: Entering directory `c:/dev/poco'
C:/app/MinGW/msys/1.0/bin/make -d -C /c/dev/poco/Foundation
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
make: Entering an unknown directory
make: *** /c/dev/poco/Foundation: No such file or directory.  Stop.
make: Leaving an unknown directory
make: *** [Foundation-libexec] Error 2
make: Leaving directory `c:/dev/poco'

没有明显的原因导致 mingw32-make 失败,因为路径没有空格。

我错过了什么?欢迎提出任何建议。

mingw32-make.exe 的上下文中,路径 /c/dev/poco/Foundation 并不代表您所想的那样。看,mingw32-make.exe 是一个 native Windows 应用程序,所以它 肯定 不会 了解 MSYS 特定路径,例如 /c/dev/poco/Foundation;相反,它将 "as is" 解释为 c:/c/dev/poco/Foundation(假设您当前的工作驱动器是 c:),我确定这不是您想要的。

您似乎确实在使用 MSYS 作为您的 shell,那您为什么还要使用 mingw32-make.exe?使用MSYS本身提供的make.exe;它确实理解 MSYS 路径。

请注意,如果您 运行 make --version 从 MSYS shell,您 应该 看到,(在撰写本文时):

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-msys

在您更新的问题中,您展示了一个 运行ning make.exe 的示例,显然 不是 这个 MSYS 版本;看起来 you 已经放置了 make.exe 的替代版本——甚至可能是 mingw32-make.exe 本身的副本,因为输出是相同的——在某个目录中在您的 $PATH 中先于 MSYS 版本。您应该删除 make.exe 的这个非 MSYS 版本;调用 MinGW 版本 mingw32-make.exe 的全部目的就是避免这种冲突。当您从 MSYS shell 运行 make 时,您需要 MSYS 版本,并且 而不是 某些 mingw32-make.exe 克隆。