You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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})

遇到的错误信息

  1. 文件名过长错误:
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]
  1. Git仓库重置失败:
fatal: Could not reset index file to revision '6897c64dbf7d18b97d3563d28dc4820e3eb52022'.

Failed to unstash changes in: 'D:/MYPROJ/Test/Build/_deps/or-tools-src'.
  1. 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!

问题原因

  1. Windows路径长度限制:Windows默认限制路径长度为260字符,OR-Tools仓库内部分文件的路径超出该限制,导致文件创建失败。
  2. Git仓库状态异常:文件创建失败引发Git仓库状态紊乱,无法完成重置和stash操作,进而导致CMake的FetchContent模块无法完成OR-Tools的拉取与构建。
  3. 使用开发分支:当前配置使用OR-Tools的master开发分支,该分支可能包含更多长文件名或不稳定内容,提升了构建失败的概率。

解决步骤

1. 启用Windows长路径支持

  • Git全局设置方式:打开命令提示符,执行以下命令开启Git长路径支持:
    git config --global core.longpaths true
    
  • 组策略设置方式(需管理员权限):
    1. 按下Win+R输入gpedit.msc打开组策略编辑器
    2. 导航至计算机配置 > 管理模板 > 系统 > 文件系统
    3. 找到并启用启用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:39