如何让 CMake find_file 在 MSYS2 上接受 UNIX 风格的路径?

How to get CMake find_file to accept UNIX-style paths on MSYS2?

我在 Windows 10 上使用 CMake 3.4.1 和 MSYS2(截至 2015 年 12 月 25 日一切都是最新的)。

当我使用 CMake 的 find_file 命令时,它不会工作,除非路径是 Windows 风格。这对我来说是个问题,因为我正在尝试使用 findwxWidgets.cmake,因此失败了。

例如:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
find_file(version_h version.h PATHS /mingw64/include/wx-3.0/wx)
message(STATUS "version_h: ${version_h}")

运行 cmake吐槽:

-- version_h: version_h-NOTFOUND

但它显然在那里:

>>> file /mingw64/include/wx-3.0/wx/version.h
/mingw64/include/wx-3.0/wx/version.h: C source, ASCII text

我想知道这是否是一个错误,或者是否有一些模糊的标志我必须设置才能使其正常工作。我如何让 CMake 的 find_file 找到具有 UNIX 风格路径的文件?

MinGW-w64 cmake 无法理解 MSYS2 路径。您可能会向 CMake 开发人员提出一个路径转换测试程序,但这相当粗鲁,我希望他们会拒绝。相反,这些事情必须逐案解决。 wx-config 作为一个 shell 脚本,提供了一个 MSYS2 路径。

这是当前版本 MSYS2 wxWidgets 包中的一个错误,将在下一个版本中修复。要解决此问题,请找到 /mingw64/bin/wx-config 或 /mingw32/bin/wx-config:

中的行
prefix=${input_option_prefix-${this_prefix:-/mingw64}}

(当然是 /mingw32)并在其后添加:

if [ "x${MSYSTEM}" = "xMINGW32" ] || [ "x${MSYSTEM}" = "xMINGW64" ]; then
    prefix=$(cygpath -m ${prefix})
fi

不过在升级时要小心删除它。