OpenSCAD 用户手册/在 Linux/UNIX 上构建
如果您幸运,您将不必构建它。许多 Linux 和 BSD 系统都具有预建的 OpenSCAD 软件包,包括 Debian、Ubuntu、Fedora、Arch、NetBSD 和 OpenBSD。查看您系统的软件包管理器以获取详细信息。
在 http://www.openscad.org 处也提供了一个通用 Linux 二进制软件包,它可以解压缩并在大多数 Linux 系统中运行。它是自包含的,并包含所需的库。
参见 https://build.opensuse.org/package/show/home:t-paul/OpenSCAD
对于 Ubuntu 系统,您也可以尝试 chrysn 在其 launchpad PPA 中提供的 Ubuntu 软件包,或者您只需将以下内容复制/粘贴到命令行中
sudo add-apt-repository ppa:chrysn/openscad sudo apt-get update sudo apt-get install openscad
他为 OpenSCAD 和 OpenCSG 提供的存储库位于 这里 和 这里。
如果您希望自己构建 OpenSCAD,请先使用您的软件包管理器在您的系统上安装 git。Git 有时以 'scmgit' 或 'git-core' 的名称打包。然后,使用 git 下载 OpenSCAD 源代码
cd ~/
git clone https://github.com/openscad/openscad.git
cd openscad
然后获取 MCAD 库,该库现在已包含在 OpenSCAD 二进制发行版中
git submodule init
git submodule update
OpenSCAD 使用大量第三方库和工具。这些被称为依赖项。通常可以在 openscad 主目录中的 README.md 中找到最新依赖项列表,位于:https://github.com/openscad/openscad/ 简要列表如下
Eigen、GCC 或 Clang、Bison、Flex、CGAL、Qt、GMP、MPFR、boost、cmake、OpenCSG、GLEW、QScintilla、glib2、harfbuzz、freetype2、pkg-config、fontconfig
大多数系统都设置为使用 '软件包管理器' 安装预建的依赖项,例如 ubuntu 上的 apt 或 Arch Linux 上的 pacman。OpenSCAD 附带一个 '帮助脚本',它尝试自动为您运行您的软件包管理器,如果存在,则下载和安装这些预建的软件包。请注意,您必须以 root 用户身份运行和/或使用 sudo 才能尝试此操作。请注意,这些脚本很可能在 Sun、Solaris、AIX、IRIX 等系统上失败(跳至以下 '构建依赖项' 部分)。
./scripts/uni-get-dependencies.sh
尝试安装依赖项后,您应该仔细检查它们。退出任何 shell,并可能重新启动。
现在验证版本号是否与 openscad/README.md 文件中列出的版本号一致。还要验证是否意外遗漏了任何软件包。例如,打开一个 shell 并运行 'flex --version' 或 'gcc --version'。这些是确保您的环境正常运行的良好健全性检查。
OpenSCAD 附带另一个帮助脚本,它尝试在许多 Linux 和 BSD 系统上自动化此过程(同样,它在 Sun/Solaris/Irix/AIX/等系统上不起作用)。
./scripts/check-dependencies.sh
如果您无法验证您的依赖项是否已正确安装并具有足够的版本,那么您可能需要 '手动' 安装一些依赖项(请参阅以下有关构建您自己的依赖项的部分)。
如果您的系统具有所有正确的依赖项版本,则继续执行 '构建 OpenSCAD' 部分。
在缺少更新的依赖项库或工具的系统上,您必须手动下载每个依赖项并构建和安装它。您可以通过单独下载每个软件包并按照安装说明进行操作来实现。但是,OpenSCAD 附带了一些脚本,这些脚本尝试在 Linux 和 BSD 系统上自动化此过程,方法是将所有内容安装到 $HOME/openscad_deps 下创建的文件夹中。此脚本不会构建典型的开发依赖项,例如 X11、Qt4、gcc、bash 等。但它会尝试 OpenCSG、CGAL、boost 等。
要运行自动化脚本,请先设置环境变量(如果您不使用 bash,请用单个 '.' 替换 'source')
source scripts/setenv-unibuild.sh
然后,运行第二个脚本进行下载和构建。
./scripts/uni-build-dependencies.sh
(如果您只需要 CGAL 或 OpenCSG,您只需运行 ' ./scripts/uni-build-dependencies.sh cgal' 或 opencsg,它仅构建单个库。)
完整的下载和构建过程可能需要几个小时,具体取决于您的网络连接速度和系统速度。建议至少有 2 GB 的可用磁盘空间来进行完整的依赖项构建。每次登录到新 shell 并希望重新编译 OpenSCAD 时,您都需要重新运行“source scripts/setenv-unibuild.sh”脚本。
完成后,返回上面关于“验证依赖项”的部分,查看它们是否已正确安装。
安装完依赖项后,就可以构建 OpenSCAD 了。
qmake # or qmake-qt4, depending on your distribution
make
您也可以将 OpenSCAD 安装到 /usr/local/ 中。‘openscad’ 二进制文件位于 /usr/local/bin 下,库和示例位于类似 /usr/local/share/openscad 的目录下,可能取决于您的系统。请注意,如果您之前安装过 OpenSCAD 的二进制 Linux 包,您应该注意删除 /usr/local/lib/openscad 和 /usr/local/share/openscad,因为它们与标准 qmake 构建的“install”目标使用的路径不同。
sudo make install
注意:在基于 Debian 的系统上,创建包并使用以下命令安装 OpenSCAD sudo checkinstall -D make install
如果您不想安装,也可以直接运行“./openscad
”,前提是您仍在 ~/openscad
目录中。
要启用实验性功能,请使用CONFIG+=experimental 重新构建项目。
qmake CONFIG+=experimental
make -B
-B 只需执行一次(当您更改配置时)。
即使明确构建为实验性构建,实验性功能默认情况下也是禁用的。
构建成功后,您会在首选项中找到一个“功能”选项卡,您可以在其中启用各个实验性功能。
或者,您可以添加
CONFIG+=experimental
作为openscad.pro的第一行。
OpenSCAD 附带超过 740 个回归测试。要构建和运行它们,建议您首先按照上述步骤构建 OpenSCAD 的 GUI 版本,包括下载 MCAD。然后,从同一个登录中,运行以下命令
cd tests
mkdir build && cd build
cmake ..
make
ctest -C All
文件“openscad/doc/testing.txt”包含更多信息。完整的测试日志位于 tests/build/Testing/Temporary
下。可以在其下找到一个机器特定的子目录下的测试的漂亮打印的 index.html 网页视图,并使用浏览器打开。
如果您在构建时遇到任何错误,请在 https://github.com/openscad/openscad/issues/ 上提交问题报告。
这可能是由于旧库存在于 /usr/local/lib 中,例如 boost、CGAL、OpenCSG 等(通常来自之前 OpenSCAD 的实验)。建议您将其删除。例如,要删除 CGAL,请运行 rm -rf /usr/local/include/CGAL && rm -rf /usr/local/lib/*CGAL*。然后删除 $HOME/openscad_deps,删除 OpenSCAD 源代码树,并重新开始。从 2013 年开始,OpenSCAD 的构建过程不建议也不要求将任何内容安装到 /usr/local/lib 或 /usr/local/include 中。
请注意,CGAL 依赖于 Boost,而 OpenCSG 依赖于 GLEW - 如果在不寻常的位置存在一些遗留库,这种相互依赖关系可能会导致问题。
另一个混淆的来源可能来自在“不干净的 shell”中运行。确保您的 LD_LIBRARY_PATH 没有设置为指向任何不寻常位置的旧库。也不要将 Mingw 窗口交叉构建与您的 Linux 构建过程混合在一起 - 它们使用不同的环境变量,可能会发生冲突。
如果由于某种原因,上面推荐的构建过程无法与 OpenCSG 一起使用,请在 OpenSCAD github 上提交问题。同时,您可以尝试自己构建它。
wget http://www.opencsg.org/OpenCSG-1.3.2.tar.gz
sudo apt-get purge libopencsg-dev libopencsg1 # or your system's equivalent
tar -xvf OpenCSG-1.3.2.tar.gz
cd OpenCSG-1.3.2
# edit the Makefile and remove 'example'
make
sudo cp -d lib/lib* $HOME/openscad_deps/lib/
sudo cp include/opencsg.h $HOME/openscad_deps/include/
注意:在基于 Debian 的系统(例如 Ubuntu)上,您可以将“install”目标添加到 OpenCSG Makefile,然后使用 checkinstall 创建一个干净的 .deb 包用于安装/删除/升级。将此目标添加到 Makefile install: # !! THESE LINES PREFIXED WITH ONE TAB, NOT SPACES !! cp -d lib/lib* /usr/local/lib/ cp include/opencsg.h /usr/local/include/ ldconfig然后
sudo checkinstall -D make install…以创建和安装一个干净的包。
如果发生这种情况,您可以尝试 自己编译 CGAL。建议您安装到 $HOME/openscad_deps,并在其他方面按照上述构建过程进行。
如果您耗尽了虚拟内存,则可能会发生这种情况,这意味着所有物理 RAM 以及来自磁盘的虚拟交换空间都已耗尽。请参阅下面关于“速度极慢”的原因。如果您是非 root 用户,您可以尝试一些方法。首先,使用“clang”编译器,因为它使用的 RAM 比 gcc 少得多。第二件事是编辑 Makefile 并从编译器标志部分删除“-g”和“-pipe”标志。
另一方面,如果您是 root 用户,则可以扩展交换空间。在 Linux 上,这是一种非常标准的过程,并且很容易在网络搜索中找到。基本上,您需要执行以下步骤(在确认没有名为 /swapfile 的文件后)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2000 # create a roughly 2 gig swapfile sudo chmod 0600 /swapfile # set proper permissions for security sudo mkswap /swapfile # format as a swapfile sudo swapon /swapfile # turn on swap
有关在 /etc/fstab 中永久设置交换空间的说明,可以通过网络搜索轻松找到。如果您是在 SSD(固态硬盘)机器上构建的,交换文件的速度可以使构建时间变得合理。
建议至少有 1.5 GB 的 RAM 来编译 OpenSCAD。如果您没有,可以尝试一些解决方法。第一种是使用 Clang 编译器的实验性支持(如下所述),因为 Clang 比 GCC 使用的 RAM 少得多。另一种解决方法是编辑 qmake 生成的 Makefile,搜索并替换优化标志(-O2)为 -O1 或空白,并从编译器行中删除任何“-g”调试标志,以及“-pipe”。
如果您有足够的 RAM,只是想加快构建速度,可以尝试使用以下命令进行并行多核构建
make -jx
其中“x”是您要使用的核心数量。请记住,您需要 x 倍的 RAM 来避免可能的磁盘抖动。
构建速度慢的原因是 OpenSCAD 使用了像 CGAL、Boost 和 Eigen 这样的模板库,这些库在编译时会使用大量的 RAM - 特别是 CGAL。在某些系统上,GCC 在编译某些 CGAL 模块时可能会占用 1.5 GB 的 RAM。在 StackOverflow.com 上有更多信息。
上面的构建说明旨在在 FreeBSD 和 NetBSD 上保持不变。但是,BSD 通常需要设置特殊的环境变量来构建任何 QT 项目 - 您可以通过运行以下命令自动设置它们
source ./scripts/setenv-unibuild.sh
NetBSD 5.x 需要使用 已修补的 CGAL 版本。建议升级到 NetBSD 6,因为它有所有 pkgin 可用的依赖项。NetBSD 还要求在创建系统时安装 X Sets (或稍后添加)。
在 OpenBSD 上,它可能会在运行时耗尽 RAM 后无法构建。OpenSCAD 至少需要 1 GB 的内存才能使用 GCC 构建。您可能需要以“staff”级别用户身份访问或更改所需的系统参数。'dependency build' 序列也尚未移植到 OpenBSD,因此您必须依赖标准的 OpenBSD 系统包工具(换句话说,您必须具有 root 权限)。
OpenSCAD 依赖项构建主要集中在 Linux 和 BSD 系统(如 Debian 或 FreeBSD)上。'helper scripts' 可能会在其他类型的 Un*x 上失败。此外,OpenSCAD 构建系统文件(GUI 的 qmake .pro 文件,测试套件的 cmake CMakeFiles.txt)尚未在非 Linux 非 BSD 系统上经过充分测试。可能需要大量工作才能在这些系统上获得有效的构建。
无头服务器
测试套件尝试自动检测您是否已设置 X11 DISPLAY 环境变量。如果没有,它会尝试自动启动 Xvfb 或 Xvnc(虚拟 X 帧缓冲区)(如果可用)。
如果您想手动运行这些服务器,可以尝试以下操作
$ Xvfb :5 -screen 0 800x600x24 & $ DISPLAY=:5 ctest
或者
$ xvfb-run --server-args='-screen 0 800x600x24' ctest
在某些情况下,Xvfb/Xvnc 无法正常工作。某些旧版本的 Xvfb 可能会失败并在没有任何警告的情况下崩溃。有时,Xvfb/Xvnc 在没有 GLX(OpenGL)支持的情况下构建,OpenSCAD 将无法生成任何图像。
基于图像的测试需要很长时间,它们会失败,并且日志会显示 'return -11'
Imagemagick 可能会在将预期图像与测试运行生成的(实际)图像进行比较时崩溃。您可以尝试通过擦除 CMakeCache 并使用 -DCOMPARATOR=ncc
重新运行 cmake 来使用备用 ImageMagick 比较方法。这将启用归一化交叉比较方法,该方法更稳定,但可能不太准确,可能会给出假阳性或假阴性。
测试图像失败,日志中显示 ImageMagick 的 “morphology not found”
您的 imagemagick 版本过旧。升级 imagemagick 或将 -DCOMPARATOR=old 传递给 cmake,否则比较可靠性会降低。
不建议移动它们,因为构建正在使用硬编码到 openscad 二进制文件中的 RPATH。您可以尝试通过将 LD_LIBRARY_PATH 环境变量设置为将您的路径/lib 放在它搜索的路径列表的第一位来解决问题。如果所有方法都失败,您可以重新运行整个依赖项构建过程,但在运行设置环境变量的脚本之前,将 BASEDIR 环境变量导出到您想要的位置。
构建完依赖项后,您可以通过删除 $BASEDIR/src 目录来释放空间 - 其中 $BASEDIR 默认值为 $HOME/openscad_deps。
OpenSCAD 的配置文件保存在 ~/.config/OpenSCAD/OpenSCAD.conf 中。
以下段落描述了一种在 Ubuntu 11.04 中轻松设置 OpenSCAD 开发环境的方法。执行以下步骤后,可以使用 QT Creator 以图形方式开始开发/调试 OpenSCAD。
- 添加所需的 PPA 存储库
# sudo add-apt-repository ppa:chrysn/openscad
- 更新并安装所需的软件包
# sudo apt-get update
# sudo apt-get install git build-essential qtcreator libglew1.5-dev libopencsg-dev libcgal-dev libeigen2-dev bison flex
- 获取 OpenSCAD 源代码
# mkdir ~/src
# cd ~/src
# git clone https://github.com/openscad/openscad.git
- 使用命令行构建 OpenSCAD
# cd ~/src/openscad
# qmake
# make
- 使用 QT Creator 构建 OpenSCAD
只需在 QT Creator 中打开项目文件 openscad.pro(CTRL+O),然后点击全部构建(CTRL+SHIFT+B)和运行按钮(CTRL+R)。
在 linux 下使用 Clang 编译器构建存在实验性支持。Clang 速度更快,使用更少的内存,并且错误消息与 GCC 不同。要使用它,首先您需要 CGAL 4.0.2 或更高版本,因为早期版本存在一个 bug,导致 clang 无法使用。然后,在构建 OpenSCAD 之前运行此脚本。
source scripts/setenv-unibuild.sh clang
Clang 支持取决于您的系统 QT 安装是否具有 clang 支持的 qmake.conf 文件。例如,在 Ubuntu 上,它位于 /usr/share/qt4/mkspecs/unsupported/linux-clang/qmake.conf。BSD clang 构建可能需要大量调整,并且尚未经过测试,尽管最终计划朝这个方向发展,因为 BSD(更不用说 OSX)正在转向将 clang 作为他们的主要编译器。