在Windows下编译FreeCAD,通常的方法是依赖官方提供的LibPack,但是只有vs2008, vs2012, vs2013等几个版本提供。比如现在感觉vs2017比较好用,可是没有官方LibPack,那就很难在vs2017上编译FreeCAD。

我不想再因为想看看FreeCAD源码,而去安装一个visual studio,不如探索一下,如何不依赖官方LibPack,生成出vs2017的工程项目。

方向确定了,那就干起来呗。给cmake传入FREECAD_LIBPACK_USE变量值为 OFF,关闭使用官方LibPack。看看会因为缺少哪些依赖库而无法通过编译。

第一个库是 Python,需要确保在PATH路径中找到 Python可执行程序。如果电脑安装过python,cmake也会通过注册表查找。建议采用python3,如果想要debug,那么就必须有debug的python dll。通常的python安装版默认是不带的,可以在安装时选择需要debug的,估计这样会从官网下载还是怎么的,反正我在一台电脑上安装如果要debug,就总是安装失败,但是另外一台电脑却可以安装成功。不知道这是什么原因。也可以直接下载python源码,里边有个PCBuild目录,vs编译不会太难。只是我也不怎么熟悉python,从源码再安装,不知道那些文件应该怎么放,也懒得比较了。

第二个库是 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了。

第三个库是 Xerces-C,这个库是读写xml文件的,没有预编译的二进制库可供下载,得去官网下载自己编译。cmake编译这个库没有什么问题。

再就是 zlib,直接使用opencascade第三方库里的就可以了,可以设计通过定义 ZLIB_ROOT 让 cmake 找到它。

FreeType,缺少这个,并不会影响cmake生成工程项目文件,只是提示 "Part module will lack of makeWireString()",就是 src/Mod/Part 里的 Part::Module 会缺少 makeWireString() 函数的实现。

Eigen3,缺少它,也不会影响cmake生成工程项目文件吧,但是会关闭 flatmesh 模块的生成。不过Eigen3是纯C++头文件使用的,添加上并不麻烦。

OpenCASCADE,从最新版7.3.0编译出来,再设法让cmake找到它。

还有 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 了。

不依赖官方LibPack编译FreeCAD的一次尝试的更多相关文章

  1. 01按照官方步骤编译NanoPiM1Plus的Android

    01按照官方步骤编译NanoPiM1Plus的Android 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/6 10:58 版本:V1.0 ...

  2. 我写的一个Qt 显示二维码( QR Code)的控件(可以去掉对 libpthread 的依赖,而且编译出的库文件可以在 vc2010 的release 模式下使用)

    最近一个项目需要显示二维码,所以花了点时间(只用了一个晚上,写的很不完善),写了个显示二维码的控件.当然这个控件用到了些开源的代码,比如qrencode,所以我也打算把我的代码开源. 我的代码参考了 ...

  3. idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在,已解决

    idea在maven中引入了jar包依赖,但是编译过程中报出XXX程序包不存在 1. 报错具体情况 2. Project Structure中的Libraries没有任何红色波浪线 3. 发现自己要引 ...

  4. (2)RGB-D SLAM系列- 工具篇(依赖库及编译)

    做了个SLAM的小视频,有兴趣的朋友可以看下 https://youtu.be/z5wDzMZF10Q 1)Library depended 一个完整的SLAM系统包括,数据流获取,数据读取,特征提取 ...

  5. java-cef系列视频第一集:从官方代码编译

    本视频介绍了如何从官方给出步骤编译java-cef代码,生成可运行可移植的发行版. 值得一提的是:截至2016-09-24java-cef代码编译方式有所改变,读者请自行查看bitbucket上关于编 ...

  6. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  7. Makeflie自动生成依赖,自动化编译

    在netbeans里开发,有一个重要文件makefile,是用来编译所有的文件. 项目的目录结构如下,扁平的目录结构,如何实现自动化编译,写makefile呢? 第一版 基础版: CC = g++ C ...

  8. maven相互依赖导致无法编译成功

    起初是新加了个模块,启动前编译时error,提示找不到依赖模块的类,但java文件上是没有报错的. 后经过排查,发现是循环依赖导致的此问题. 如图,弹出框中有循环依赖的模块会显示红色,右键Open M ...

  9. 【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法

    如图片所示,提示是没有找到cmake命令.看来是需要camke软件支持的,由于当初安装CMake后我重装了系统,也没有把cmake的bin路径 解决办法一:重新安装CMake,并勾选上"ad ...

随机推荐

  1. Ansible-下部

    ansible-playbook  playbook是由一个或多个模块组成的,使用多个不同的模块,完成一件事情. ansible软件特点 可以实现批量管理可以实现批量部署ad-hoc(批量执行命令)- ...

  2. Appium 使用笔记

    零.背景 公司最近有个爬虫的项目,先拿小红书下手,但是小红书很多内容 web 端没有,只能用 app 爬,于是了解到 Appium 这个强大的框架,即可以做自动化测试,也可以用来当自动化爬虫. 本文的 ...

  3. 挑选(pick)

    挑选(pick) 1s/128MB [题目背景] NOIP2017 马上就要到了,丁爷爷想要从他的小朋友里挑选出一些厉害的来参加NOIP.  [题目描述] 丁爷爷共有 n 个小朋友,按编号 1 . . ...

  4. Hibernate 框架 -HQL 语法

    HQL ( Hibernate Query Language ) 查询语言是面向对象的查询语言,也是在 Hibernate 中最常见的.其语法和 SQL 语法有一些相似,功能十分强大,几乎支持除特殊 ...

  5. Hibernate 框架入门

    接着上一篇的 Hibernate 框架的了解,我们就继续学习 Hibernate 框架.这次就进入 Hibernate 框架的入门学习. 首先在学习 Hibernate 框架之前,我们要准备好我们需要 ...

  6. 教你如何在5分钟轻松部署squid正向代理

    正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返 ...

  7. Go语言系列:(1)在VsCode中配置Go的开发环境

    一.为什么选VSCode 这个系列的初宗是带领公司的PHPer转Go,在正式写这篇博文前,咱们先说说Go有哪些主流的IDE 1.GoLand(收费) JetBrains出品必属精品,除了贵没有其它缺点 ...

  8. openldap数据备份还原

    数据备份[root@Server ~]# slapcat -n 2 -l /root/ldapbackup_ilanni.ldif脚本 ----- #!/bin/bash # 备份脚本 PATH=&q ...

  9. 将Excel表结构导入到Powerdesigner

    我们经常会在excel中设计整理表结构,整理完需要导入到Powerdesigner中,可以通过以下脚本来实现快速,具体操作方法: 打开PowerDesigner,新建模型,点击Tools|Execut ...

  10. IT兄弟连 HTML5教程 HTML5表单 新增的表单属性3

    9  novalidate novalidate是属性规定在提交表单时不应该验证form和input域.novalidate属性适用于的<input>类型有:text.search.url ...