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 作為他們的主要編譯器。