git - 如何让 CMake 的 ExternalProject_Add 在 Visual Studio 中工作(git-submodule 问题)?
问题描述
我正在尝试在 Visual Studio 2017 中构建Pangolin以直接在 Windows 10 上构建。Pangolin 的 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-submodule 脚本的路径(对我而言)应该添加到系统路径有关。将这些添加到系统路径(对于系统或用户)不会影响结果(重新启动系统,VS 只是为了确保注册新路径)。我还尽我所能确保脚本文件本身对任何用户都具有运行权限(对此有什么警告吗?)。C:\Program Files\Git\mingw64\libexec\git-core
从 cmd 复制/粘贴:
C:\WINDOWS\system32>echo %PATH%
C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\mingw64\libexec\git-core;C\Program Files\...
有谁知道如何使它工作或有任何建议?
当前解决方法:BUILD_EXTERN_GLEW=OFF
在 CMake 中设置并根据其 CMake 手动签出并构建 GLEW Pangolin 需要的版本。
版本:
- 混帐 2.23.0.windows.1
- VisualStudio 社区 2017 15.9.16
- CMake 3.15.3
- Pangolin 25159034e62011b3527228e476cec51f08e87602(在撰写本文时对大师的最新承诺)
[编辑(附加信息)]
- 从 Git Bash、命令提示符或通过 CMake-gui 运行 cmake 时,我得到了相同的结果。
- 我在另一台机器上完美构建了旧版本的 Git 和 CMake。
解决方案
我可以通过从普通命令提示符而不是 git bash 运行 cmake 来解决这个问题。似乎 git bash 会产生非 ascii 路径,这会导致一些 git 命令失败。(请参阅https://stackoverflow.com/a/58192041 - 希望在 git 2.24 中得到修复)
推荐阅读
- r - 从 R6 方法继承 Roxygen 文档
- python - 如何创建一个递归函数,返回给定两个列表的相同索引的总和列表。?
- entity-framework - 将 DbContext 注入到动态注入的服务中,WepApi .netcore3.1 应用程序
- loops - 在其上下文附近定义变量或避免重复分配/初始化之间哪个更好?
- c - 二进制 + c 编程的无效操作数
- c - 启用优化时 C 程序的输出发生变化
- javascript - Heroku 推送问题
- latex - 对齐 !缺少 } 插入
- javascript - Javascript:十六进制到字符串,无需转换为 ascii、int 或 xyz
- c# - 无论记录是否存在,SQLite EXISTS 参数都返回 -1,C#