Windows下用CMake链接OrTools至项目时遇构建配置错误求助
OR-Tools CMake构建失败问题分析与解决方案
问题背景
用户在配置基于OR-Tools的CMake项目时,遭遇一系列错误导致配置流程终止,以下是用户提供的CMake配置代码及报错信息:
提供的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.20.3) PROJECT(LMH VERSION 1.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # OR-tools SET(BUILD_DEPS ON) SET(USE_COINOR OFF) INCLUDE(FetchContent) SET(FETCHCONTENT_QUIET FALSE) FETCHCONTENT_DECLARE( or-tools GIT_REPOSITORY https://github.com/google/or-tools.git GIT_TAG master GIT_PROGRESS TRUE ) FETCHCONTENT_MAKEAVAILABLE(or-tools) # Source files SET(SRC # ... ) # Header files SET(HEADER # ... ) ADD_LIBRARY(LMH STATIC ${SRC} ${HEADER} ) TARGET_INCLUDE_DIRECTORIES(LMH PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Header $ENV{Boost} ) TARGET_LINK_LIBRARIES(LMH ortools::ortools) # For VS, to maintain the current directory tree inside the Solution Explorer SOURCE_GROUP(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SRC}) SOURCE_GROUP(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${HEADER})
遇到的错误信息
- 文件名过长错误:
CUSTOMBUILD : error : unable to create file docs/javadoc/com/google/ortools/constraintsolver/SWIGTYPE_p_std__vectorT_std__setT_operations_research__RoutingModel__VehicleTypeContainer__VehicleClassEntry_t_t.html: Filename too long [D:\MYPROJ\Test\Build\_deps\or-tools-subbuild\or-tools-populate.vcxproj]
- Git仓库重置失败:
fatal: Could not reset index file to revision '6897c64dbf7d18b97d3563d28dc4820e3eb52022'. Failed to unstash changes in: 'D:/MYPROJ/Test/Build/_deps/or-tools-src'.
- CMake配置最终失败:
CMake Error at C:/Program Files/CMake/share/cmake-3.24/Modules/FetchContent.cmake:1576 (message): Build step for or-tools failed: 1 Call Stack (most recent call first): C:/Program Files/CMake/share/cmake-3.24/Modules/FetchContent.cmake:1716:EVAL:2 (__FetchContent_directPopulate) C:/Program Files/CMake/share/cmake-3.24/Modules/FetchContent.cmake:1716 (cmake_language) C:/Program Files/CMake/share/cmake-3.24/Modules/FetchContent.cmake:1923 (FetchContent_Populate) D:/MYPROJ/Library/CMakeLists.txt:26 (FETCHCONTENT_MAKEAVAILABLE) Configuring incomplete, errors occurred!
问题原因
- Windows路径长度限制:Windows默认限制路径长度为260字符,OR-Tools仓库内部分文件的路径超出该限制,导致文件创建失败。
- Git仓库状态异常:文件创建失败引发Git仓库状态紊乱,无法完成重置和stash操作,进而导致CMake的FetchContent模块无法完成OR-Tools的拉取与构建。
- 使用开发分支:当前配置使用OR-Tools的
master开发分支,该分支可能包含更多长文件名或不稳定内容,提升了构建失败的概率。
解决步骤
1. 启用Windows长路径支持
- Git全局设置方式:打开命令提示符,执行以下命令开启Git长路径支持:
git config --global core.longpaths true - 组策略设置方式(需管理员权限):
- 按下
Win+R输入gpedit.msc打开组策略编辑器 - 导航至
计算机配置 > 管理模板 > 系统 > 文件系统 - 找到并启用
启用Win32长路径选项,重启电脑生效
- 按下
2. 清理异常构建目录
删除D:\MYPROJ\Test\Build\_deps下所有与or-tools相关的文件夹(如or-tools-src、or-tools-subbuild),清除残留的异常仓库状态。
3. 切换至OR-Tools稳定版本
修改CMakeLists.txt中的GIT_TAG为具体稳定版本标签(例如v9.7),规避开发分支的不稳定因素:
FETCHCONTENT_DECLARE( or-tools GIT_REPOSITORY https://github.com/google/or-tools.git GIT_TAG v9.7 # 可替换为最新稳定版本标签 GIT_PROGRESS TRUE )
4. 重新执行CMake配置
清理完构建目录后,重新运行CMake配置命令,完成项目构建。
内容的提问来源于stack exchange,提问作者AathakA
相关产品推荐
相关产品推荐

