Windows 构建

本文档描述了如何仅使用免费可用(这并不意味着“开源”)的工具在 Windows 下构建 SUMO。关于如何使用开源工具链在 Windows 下构建 SUMO 的说明包含在我们的 在 Linux 上构建 页面中。请注意,您也可以 下载预构建的 Windows 二进制文件

先决条件#

推荐的 Windows 设置#

可以使用 Visual Studio 中的 项目 -> CMake 设置 轻松修改、加载和保存 CMake 设置。

使用 Visual Studio 编辑 CMake 设置

可选但仍推荐的步骤#

  • (30 天后)设置一个 Microsoft 帐户(如果您还没有)并注册您的 Visual Studio

更多说明#

如果您需要不同的 Python 版本或想使用多个 Python 进行测试,您可以直接从 Visual Studio 安装它们,或者 下载适用于 Windows 的 Python 并进行安装。大多数 SUMO 工具应该同时兼容 Python 2 和 3。请确保按照上述说明安装推荐的 Python 模块,并且 PATH 环境变量包含所需 Python 解释器所在的目录。

如果您想在调试模式下构建 SUMO,则需要 Python 调试二进制文件。Visual Studio 自带的 Python 解释器默认不安装这些库(至少在 Visual Studio Community 2022 的情况下);您需要在上述 Python 和 C++ 开发堆栈 之外额外安装 Data Science stack。更准确地说,您需要的组件称为 Python native development tools,请确保选中正确的复选框。

如果您想克隆/检出特定的 SUMO 版本,当然可以从命令行进行(如果您已安装命令行工具),使用 git clone --recursive https://github.com/eclipse-sumo/sumo 或下载并解压源代码包,请参阅 下载

的命令是:git clone --recursive https://github.com/DLR-TS/SUMOLibraries。如果您没有将库放在与 SUMO 相同的文件夹中,则需要将 SUMO_LIBRARIES 环境变量设置为该目录。

如果 Visual Studio 第一次尝试失败,很可能是因为 SUMOLibraries 尚未克隆或位于不寻常的位置。错误通常是由于找不到 Xerces 导致的。请尝试:

  • 选择 项目->"生成缓存" 重试(在早期的 Visual Studio 版本中是 CMake->生成)或参见 下文

调整设置#

如果您需要修改设置,可以通过在您喜欢的文本编辑器中打开 CMakeCache.txt 或通过 项目->CMake-Cache 菜单进行编辑。以下内容可能有用:

  • 如果找不到库,请将 SUMO_LIBRARIES:PATH 设置为类似 C:/Users/tests/source/repos/SUMOLibraries 的路径,然后重试
  • 如果找到了错误的 Python 解释器或库,请编辑 PYTHON_* 变量
  • 如果您想禁用 GUI (Fox) 的构建或 Proj 的使用,请将相应的库条目设置为空字符串
  • 为了在图形应用程序 sumo-gui 和 netedit 的 Release 构建中启用控制台输出,请设置 CONSOLE_RELEASE=1

要进行调试构建,您不应在缓存文件中更改 CMAKE_BUILD_TYPE。您应该在 GUI 中选择不同的配置。

#

我们在 https://github.com/DLR-TS/SUMOLibraries 提供了一个获取所有依赖库的中心位置。最简单的方法是克隆此存储库并定义一个指向结果目录的环境变量 SUMO_LIBRARIES。它们是使用 Visual Studio 2019 构建的,但也可以用于早期和后期版本。您可能需要安装 Visual C++ 2019 Redistributable 才能运行 SUMO(已使用 Visual Studio 2019 测试)。

有关构建您自己的库以及如何使用不同版本和附加库的详细信息,请参阅 Installing/Windows_Libraries。您可能需要编辑您的 CMakeCache.txt 以使用自制的库。

vcpkg 支持#

如果您无法使用 SUMOLibraries 或想从源代码构建(可能是针对不同的平台,或者因为您想启用或禁用库中的某些功能),您也可以尝试针对 vcpkg 进行构建。设置遵循以下基本步骤:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install arrow gdal xerces-c gettext fmt eigen3

除非您确定所有构建都将使用 vcpkg 库,否则不应调用 ./vcpkg integrate install,因为如果您以后决定针对 SUMOLibraries 构建,它可能会搞乱您的环境。相反,您应该将 -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake 添加到您的 cmake 选项中。

不幸的是,FOX 工具包仍然缺失于 vcpkg,因此您无法仅使用 vcpkg 构建任何 GUI 应用程序。

安装 Python 包#

为了从命令行或在 netedit 中使用 SUMO Python 工具,建议安装一系列 Python 包。从您的 SUMO 目录中,您可以使用 pip 安装它们:

pip install -r tools\requirements.txt

手动 CMake 配置#

方法 1:通过 CMake GUI#

  • 启动 CMake GUI
  • 选择源路径(例如 D:\projects\sumo)
  • 选择构建路径(例如 D:\projects\sumo\cmake-build)
    • 它可以与源路径相同,但我们建议将它们分开
    • 必要时将创建构建目录
  • 按下 "Configure" 按钮开始配置
    • 选择编译器(默认即可)
    • 选择平台 x64
  • 点击 "Generate" 创建 Visual Studio 解决方案
  • 使用文件资源管理器或点击 "Open Project" 打开生成的解决方案(.sln 文件)(例如 D:\projects\sumo\cmake-build\SUMO.sln
  • 构建您想要的配置
    • 二进制文件将出现在 D:\projects\sumo\bin

可视化指南:

在 CMake GUI 中选择解决方案(Visual Studio、Eclipse 等)

库已成功配置

生成的解决方案

方法 2:通过 CMake 命令行#

  • 转到源路径(例如 cd D:\projects\sumo
  • 创建一个构建目录(例如 mkdir cmake-build && cd cmake-build
  • 使用正确的 Visual Studio 版本运行 CMake(例如 cmake .. -G "Visual Studio 16 2019 Win64"
    • 要查看所有可能的生成器列表,请运行 cmake --help
  • 打开解决方案 D:\projects\sumo\cmake-build\SUMO.sln
    • 或者使用 cmake --build . --config Release 从命令行构建

测试#

如果您计划自己扩展 SUMO,或者只是想知道是否所有内容都编译成功,强烈建议查看 Developer/Tests。该工具使检查现有功能是否因扩展而损坏变得更加容易。

CLang#

如果您想在 Windows 下使用 CLang 进行编译,只需在 CMake 的 "Optional Toolset" (-T) 中添加 "ClangCL"。

故障排除#

  • 关于安装路径的说明:MSVC 似乎难以处理包含空格的 include 和 library 路径(例如 C:\Program Files)。因此,请尽量避免将 SUMO 或任何库安装在此类路径中。
  • 找不到 Python
    • 确保没有安装两个不同的 Python 版本
    • 可以手动指定 Python 库(例如 <PythonFolder\>\\libs\\python<version\>.lib

CMake 缓存中的 Python 库字段

同时存在两个不同的 Python 版本

您可能将库安装到了名称中包含空格的路径中。在这种情况下,相应的环境变量应该用引号 (") 括起来。

示例:set FOX="D:\my libs\fox-1.6.36"

预构建事件失败(缺少 version.h 或 *typemap.h)#

如果 Visual Studio 报告预构建事件失败,您可以安全地忽略此问题,除非您是从源代码仓库构建的。在这种情况下,您可能需要安装 Python。即使安装了 Python,文件关联也可能已损坏,这会导致通过 tools/build_config/version.py 脚本生成 src/version.h 失败。要么修复您的文件关联,要么在 src/config.h.cmake 中取消定义 HAVE_VERSION_H

如果您正确安装了 Python,请仔细检查它是否传递了命令行参数。作为快速修复,您也可以手动执行以下命令:

tools\build\version.py
tools\build\typemap.py

无法执行程序,因为找不到 MSVCR120.dll/MSVCR140.dll#

安装 Microsoft Visual C++ Redistributable Packages for Visual Studio(对于 MSVCR120.dll,请使用 Visual Studio 2013 版本)。您可以使用 Dependencies 检查所有依赖项是否正确。

在调试模式下,无法执行程序,因为找不到 MSVCR120D.dll/MSVCR140D.dll#

您的 Visual Studio 版本不支持调试,您只能在发布模式下编译。

如何构建 JuPedSim 然后使用 JuPedSim 构建 SUMO#

在本节中,您将学习如何构建最新版本的行人模拟器 JuPedSim,以及如何使用此最新版本的 JuPedSim 编译 SUMO,以防 SUMO 自带的 JuPedSim 发布版本不能满足您的需求。您可以参考 JuPedSim 的构建过程此处;下文提出了类似的过程。首先,克隆 JuPedSim 仓库:

git clone https://github.com/PedestrianDynamics/jupedsim.git

在仓库目录之外,但在同一级别,创建两个目录 jupedsim-buildjupedsim-install(例如),然后输入:

cd jupedsim-build
cmake -DCMAKE_INSTALL_PREFIX=../jupedsim-install ..
cmake --build . --config Release
cmake --install . --config Release

您也可以将配置更改为 Debug,并像往常一样在 CMake 中启用多线程。现在要将最新版本的 JuPedSim 集成到 SUMO 中,请遵循 Windows 的标准构建过程:由于 JuPedSim 安装文件夹与 SUMO 处于同一级别,它将被自动找到。或者,您可以在调用 CMake 时设置 JUPEDSIM_CUSTOMDIR 来通知 CMake JuPedSim 的安装位置。

有关在 SUMO 内部使用 JuPedSim 的更多说明,请参阅此页面