不依賴官方LibPack編譯FreeCAD的一次嘗試

在Windows下編譯FreeCAD,一般的方法是依賴官方提供的LibPack,可是隻有vs2008, vs2012, vs2013等幾個版本提供。好比如今感受vs2017比較好用,但是沒有官方LibPack,那就很難在vs2017上編譯FreeCAD。python

我不想再由於想看看FreeCAD源碼,而去安裝一個visual studio,不如探索一下,如何不依賴官方LibPack,生成出vs2017的工程項目。git

方向肯定了,那就幹起來唄。給cmake傳入FREECAD_LIBPACK_USE變量值爲 OFF,關閉使用官方LibPack。看看會由於缺乏哪些依賴庫而沒法經過編譯。github

第一個庫是 Python,須要確保在PATH路徑中找到 Python可執行程序。若是電腦安裝過python,cmake也會經過註冊表查找。建議採用python3,若是想要debug,那麼就必須有debug的python dll。一般的python安裝版默認是不帶的,能夠在安裝時選擇須要debug的,估計這樣會從官網下載仍是怎麼的,反正我在一臺電腦上安裝若是要debug,就老是安裝失敗,可是另一臺電腦卻能夠安裝成功。不知道這是什麼緣由。也能夠直接下載python源碼,裏邊有個PCBuild目錄,vs編譯不會太難。只是我也不怎麼熟悉python,從源碼再安裝,不知道那些文件應該怎麼放,也懶得比較了。shell

第二個庫是 boost,會因爲找不到boost而沒法繼續cmake,能夠設置 BOOST_ROOT 指向 boost 安裝位置。在這裏有個提醒的是,從boost1.65仍是哪一個版本開始,boost.python的dll有所不一樣,在 src/Mod/Path/area 有個find_package( Boost COMPONENTS python${BOOST_PY_SUFFIX} ) 按命名查找,好像比較容易查找。推薦 boost1.68以上。這裏好像對cmake版本也有要求,我原來是3.9,後面升到3.14.1了。ide

第三個庫是 Xerces-C,這個庫是讀寫xml文件的,沒有預編譯的二進制庫可供下載,得去官網下載本身編譯。cmake編譯這個庫沒有什麼問題。函數

再就是 zlib,直接使用opencascade第三方庫裏的就能夠了,能夠設計經過定義 ZLIB_ROOT 讓 cmake 找到它。ui

FreeType,缺乏這個,並不會影響cmake生成工程項目文件,只是提示 "Part module will lack of makeWireString()",就是 src/Mod/Part 裏的 Part::Module 會缺乏 makeWireString() 函數的實現。debug

Eigen3,缺乏它,也不會影響cmake生成工程項目文件吧,可是會關閉 flatmesh 模塊的生成。不過Eigen3是純C++頭文件使用的,添加上並不麻煩。設計

OpenCASCADE,從最新版7.3.0編譯出來,再設法讓cmake找到它。3d

還有 Coin3D,這是FreeCAD在顯示方面所依賴的庫。有個 pivy 是對 Coin3D 的python捆綁,在FreeCAD的github庫裏有,可是 python pip 不能安裝。

還有 Qt,沒有這個,就得不到UI界面了。不建議Qt4了,給 cmake 傳入 BUILD_QT5 爲ON 啓用Qt5的編譯。

PySide2,這是Python對Qt5的捆綁。有些模塊會使用 pyside2-rcc.exe 去生成 Qt的資源文件qrc,缺乏它的話,在這些地方會編譯失敗。能夠經過 python 的pip 安裝 PySide2。

MedFile,認爲這個庫很不常見,若是打開 FREECAD_USE_EXTERNAL_SMESH,就不須要 MedFile 了,能夠經過 salome找到 med 的源碼;還有netgen, hdf5等不少庫,數量很多,都是網格方面的,爲求簡便,也就不追求生成出全部的模塊,因此這些都仍是跳過吧。若是真的有切實須要,再來處理它們。

當前狀態與結果

最終結果存儲在 個人github-FreeCAD fork,develop分支的 vsbuild 目錄,執行腳本 buildscript_vs2017.bat 疊加源碼同級目錄 FreeCAD-LibPack 能夠獲得vs2017的工程項目文件。

爲了獲得這些工程,關閉了很多模塊,在運行時也還有問題。這些問題主要出在python方面,最典型的是找不到 shiboken2。

對 FreeCAD 的感受是,在不少的地方都會藉助 python 來輔助搭建,好比導入dxf。如今發現好多庫都有 python 捆綁,好比vtk,ifcopenshell等等,好像這個世界是 python 的了。

佩服 python,有點酸溜溜,可是也得指明在這些地方,底層還都是C++。我以爲FreeCAD若是能夠不依賴 python,只是在C++之上提供對 Python 的接口,整個源碼是否是會更純潔好理解一些。

導入dxf

導入dxf是在 Mod/Draft 內定義的,語句 App.addImportType("Autodesk DXF 2D (*.dxf)","importDXF") 代表導入dxf文件會由 importDXF 模塊來完成,這對應的是 importDXF.py 文件。看了一下這裏的源碼,能夠發現它又要從另一個地方下載似的。

importDXF.py 裏邊所有是Python語句,但事實上 Draft/App 之下又存有 C++版的 dxf 格式讀寫,看起來是向 Heeks 借用的 dxf.h/dxf.cpp。importDXF.py 裏在某種狀況會調用 C++版的,可是我沒成功執行過,緣由是缺乏 shiboken2,這個我惱火的是我已經在 Python 那裏安裝 PySide2 時會有 shiboken2 呀,爲何找不到呢。固然爲了保持依賴庫在同一個地方(除了Qt以外),我將 Python 拷貝在 FreeCAD-LibPack/Python 裏邊,同時電腦 C 盤目錄之下還有一個python。

題外話

剛剛發現 FreeCAD 官方在發佈 19_pre 時提供了 FreeCADLibs_12.1.2_x64_VC15.7z ,估計 vs2017 也可使用 官方 LibPack 了。

相關文章
相關標籤/搜索