macOS 构建

本文档描述了如何在 macOS 上从源代码安装和构建 SUMO。如果您不想扩展 SUMO,而只是使用它,您可能更希望直接从此处下载安装程序。

您可以通过两种方式在 macOS 上构建和安装 SUMO:Homebrew(推荐)和 MacPorts

Homebrew 方式#

先决条件#

安装需要 Homebrew。如果您尚未安装 homebrew,请通过执行以下命令进行安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

并确保您的 homebrew 数据库是最新的。

brew update

为了编译 SUMO 的 C++ 源代码文件,需要 C++ 编译器。在 macOS 上,默认的 C/C++ 编译器是 Clang。如果您想安装 Clang 编译器,请使用以下命令:

xcode-select --install

成功安装后,您可以使用以下命令测试 Clang:

clang --version

SUMO 使用 CMake 来管理软件编译过程。您可以使用 homebrew 轻松安装 CMake。

brew install cmake

依赖项#

为了编译和执行 SUMO,需要安装几个库。您可以使用以下命令通过 homebrew 安装这些依赖项:

brew install --cask xquartz
brew install xerces-c fox proj gdal gl2ps

根据您在编译期间想要启用的 SUMO 功能,您可能需要安装额外的库。大多数库在 homebrew 中可用,并且应该能被 CMake 识别。以下是准备更多功能(如 libsumo 和测试环境)所需的内容:

brew install python ccache googletest fmt swig eigen apache-arrow pygobject3 gtk+3 adwaita-icon-theme
python3 -m pip install texttest

您可以选择性地包含 OSG (OpenSceneGraph) 以启用实验性的 3D-Visualization

brew install open-scene-graph

在 macOS Catalina 上修复 fox 库的问题#

如果您在 macOS Catalina 上遇到分段错误(segmentation faults),请按照以下步骤操作(参见 Issue 6242)。

  1. 卸载 Catalina 版本的 fox: brew uninstall --ignore-dependencies fox

  2. 编辑 fox 的 brew Formula: brew edit fox

  3. 注释掉或删除以下行: sha256 "c6697be294c9a0458580564d59f8db32791beb5e67a05a6246e0b969ffc068bc" => :catalina

  4. 安装 Mojave 版本的 fox: brew install fox

Git 克隆与构建#

SUMO 的源代码可以通过以下命令克隆到目录 ./sumo。环境变量 SUMO_HOME 也应设置为该目录。

git clone --recursive https://github.com/eclipse-sumo/sumo
export SUMO_HOME="$PWD/sumo"

SUMO 通常作为源外构建(out-of-source build)进行构建。您需要为构建创建一个目录,并从那里调用 CMake 以触发配置。

cd $SUMO_HOME
cmake -B build .

CMake 配置过程的输出将向您显示系统上找到了哪些库,以及相应地启用了哪些 SUMO 功能。 现在可以使用以下命令触发构建过程:

cd $SUMO_HOME
cmake --build build --parallel $(sysctl -n hw.ncpu)

您可能还需要运行 make install 或将 $SUMO_HOME/bin 添加到 PATH 中,以便从命令行轻松启动 sumo 或任何其他应用程序。

可选步骤#

TraCI as a Service (TraaS)#

TraaS 是一个用于处理 TraCI 的 java 库。可以通过以下命令触发 TraaS 的构建。

cd $SUMO_HOME
cmake --build build --target traas --parallel

示例和单元测试#

SUMO 提供了用于 Google 测试和模拟框架 - Googletest 的单元测试。为了执行这些测试,您首先需要安装 Googletest。

brew install googletest

示例的创建和测试的执行可以通过以下方式触发:

cd $SUMO_HOME
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target examples test

更多信息请参见此处

使用 TextTest 进行集成测试#

SUMO 使用名为 TextTest 的应用程序来管理和执行广泛的集成测试集。如果您计划通过新功能扩展 SUMO,我们鼓励您也为您的代码向 SUMO 测试套件添加测试,并确保现有功能不受影响。

在 macOS 上安装 TextTest 的文档请参见此处

代码编辑器#

最后,您可能还想使用代码编辑器或集成开发环境。有各种合适的工具可供选择。如果您不确定选择哪种工具,我们建议您看看 macOS 版的 Visual Studio Code。Visual Studio Code 的 CMake 配置文档请参见此处

macOS 上用于 libsumo 的 Python#

在使用 brew 的 mac 上通常有三个可用的 Python 版本。 - Python 2.7(随 macOS 附带)- (/usr/bin/python) - Python 3.8.2(随 Xcode 附带)- (/usr/bin/python3) - Python 3.8.6(通过 Brew 安装)- (/usr/local/bin/python3.8)

如果您在 cmake 期间没有配置任何“特殊”内容,它将找到 Python 2.7 安装并使用该版本的 Python 框架来构建 libsumo。在您的 cmake 输出中,您会发现类似以下内容:

-- Found PythonInterp: /usr/bin/python (found version "2.7.16")
-- Found Python: /usr/bin/python
...
-- Found PythonLibs: /usr/lib/libpython2.7.dylib (found version "2.7.16")

您应该能够直接使用 python 2.7 并导入 libsumo。

Python 2.7.16 (default, Jun  5 2020, 22:59:21)
[GCC 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.29.20) (-macos10.15-objc- on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import libsumo
>>>

如果您想使用 Python 3.x,我们建议使用随 Brew 附带的 Python 版本(例如 brew install python@3.8)。为了使用此 Python 版本,您必须告诉 CMake 使用这个特定的 Python 解释器:

cd $SUMO_HOME
mkdir -p out/build-python3.8
cd out/build-python3.8
cmake -DPYTHON_EXECUTABLE=/usr/local/bin/python3.8 ../..

在 CMake 配置输出中,您应该看到类似以下的行:

-- Found PythonInterp: /usr/local/bin/python3.8 (found version "3.8.6")
...
-- Found PythonLibs: /usr/local/Frameworks/Python.framework/Versions/3.8/lib/libpython3.8.dylib (found version "3.8.6")

构建后,您应该能够加载 libsumo

$ python3.8
Python 3.8.6 (default, Oct 27 2020, 08:57:44)
[Clang 12.0.0 (clang-1200.0.32.21)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import libsumo
>>>

如果您不想使用来自 macOS 的 Python 2.7 或来自 Brew 的 Python 3,而是想使用来自 Xcode 的 Python 3.x,您需要告诉 cmake 在哪里找到 Xcode 命令行工具的 Python 安装。以下路径设置适用于 macOS Catalina 和 Xcode 12.1 的命令行工具。

cmake \
-DPYTHON_EXECUTABLE=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR:PATH=/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Headers \
-DPYTHON_LIBRARY:FILEPATH=/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/Current/lib/libpython3.8.dylib \
../..

构建后,您应该能够加载 libsumo。

/usr/bin/python3
Python 3.8.2 (default, Sep 24 2020, 19:37:08)
[Clang 12.0.0 (clang-1200.0.32.21)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import libsumo
>>>

Note

要构建 JuPedSim 并使用 JuPedSim 构建 SUMO,请遵循 Linux 构建说明

Macports 方式(旧版)#

Note

这使用了预打包版本的 sumo,这很方便,但可能滞后于 SUMO 的最新官方版本。

您应该首先安装 Macports。之后启动终端会话并运行

sudo port install sumo

虽然这将安装一个您可能不想使用的 SUMO 版本,但它会引入您需要的所有依赖项。

如果您想从存储库检出构建,您还应该执行

sudo port install automake autoconf

在获得所需的库后,您可以遵循在 Linux 下构建的构建步骤,您可能想在配置行中添加另一个 --prefix=/opt/sumo。

如果您希望使用 clang 而不是 gcc 进行编译,请执行:

./configure CXX=clang++ CXXFLAGS="-stdlib=libstdc++"