如何让CMake的ExternalProject_Add在Visual Studio中工作(git-submodule问题)?



我正在尝试构建Pangolin,以便在Visual Studio 2017中直接在Windows 10上构建。 穿山甲的CMake涉及以下命令:

ExternalProject_Add( __glew
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/glew"
GIT_REPOSITORY https://github.com/Perlmint/glew-cmake.git
GIT_TAG 7574ab4d00b683e56adbfdec7da636529dfe65d8
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
)

运行此代码时,我收到以下错误:

fatal: 'submodule' appears to be a git command, but we were not
able to execute it. Maybe git-submodule is broken?

我的分析表明,这发生在执行以下生成的 CMake 代码(来自build-dir/external/glew/tmp/__glew-gitclone.cmake(:

execute_process(
COMMAND "C:/Program Files/Git/mingw64/bin/git.exe"  submodule update --recursive --init 
WORKING_DIRECTORY "C:/Users/scrambledusername/Garage/Pangolin/build/external/glew/src/__glew"
RESULT_VARIABLE error_code
)
if(error_code)
message(FATAL_ERROR "Failed to update submodules in: 'C:/Users/scrambledusername/Garage/Pangolin/build/external/glew/src/__glew'")
endif()

换句话说,命令git submodule update --recursive --init会导致错误。但是,通过 Git Bash 手动运行时不会导致错误。

一些研究(也在相关的提交和这里(表明这可能与 git 路径或带有 git 子模块脚本的路径(对我来说C:Program FilesGitmingw64libexecgit-core(应该添加到系统路径有关。将这些前缀添加到系统路径(对于系统 OR 用户(不会影响结果(重新启动系统,VS 只是为了确保注册新路径(。我还尽我所能确保脚本文件本身具有任何用户的运行权限(对此有警告吗?

从cmd复制/粘贴:

C:WINDOWSsystem32>echo %PATH%
C:Program FilesGitmingw64bin;C:Program FilesGitmingw64libexecgit-core;CProgram Files...

有谁知道如何让它工作或有任何建议?

当前的解决方法:在 CMake 中设置BUILD_EXTERN_GLEW=OFF,并根据 CMake 手动签出并构建 GLEW 穿山甲需求的版本。

版本:

  • git 2.23.0.windows.1
  • VisualStudio Community 2017 15.9.16
  • CMake 3.15.3
  • 穿山甲 25159034e62011b3527228e476cec51f08e87602(撰写本文时最新提交给大师(

[编辑(附加信息(]

  1. 从 Git Bash 运行 cmake 时我得到了相同的结果,命令 提示,或通过CMake-gui。
  2. 我在另一台较旧的机器上获得了完美的构建 Git 和 CMake 的版本。

我能够通过从普通命令提示符而不是 git bash 运行 cmake 来解决此问题。似乎 git bash 会产生非 ascii 路径,这会导致某些 git 命令失败。(请参阅 https://stackoverflow.com/a/58192041 - 希望在 git 2.24 中得到修复(