VS2017/19下FreeCAD v0.18和0.19 源码编译

本文介绍windows 下用 vs2017 2019 编译 FreeCad 0.18。在我写这文章的时候,0.19 版本发行了,我用本文介绍的方法,也完成编译并运行了0.19版本,编译中的错误也一样,居然没有更正过来。

前提准备

我是windows 10 (安装要求是windows 7以上),电脑上安装了visual studio 2017, 其实visual studio 2019 可能更好。据说0.18 版本是vs2013 版上开发的,那样的话,就用官方的文档更合适:https://wiki.freecadweb.org/Compile_on_Windows

我的电脑上有cmake 3,16,还有git。 如果你没这些,推荐下面下载安装。

visual studio 2019:

https://visualstudio.microsoft.com/downloads/

cmake 

https://cmake.org/download/

建议18.5 的版本,官方说不要最新的,应该是:3.11.x - 3.18.x.

git:

https://git-scm.com/downloads

sdk 的安装

vs2017 的sdk 用 visual studio installer 安装, 至少选一种比较新的sdk ,全部选要占10G以上空间。如果没有安装SDK ,第一轮就会报错,提示没有SDK。

硬盘空间的准备: 下面2个下载各需要300M 空间,解压后代码占用500M, 支持库3.5G, 编译一种比如release 后,接近10G 

下载源代码

下载包含2部分,一是源代码的下载,

源代码下载链接是:

官方 Github 仓库https://github.com/FreeCAD/FreeCAD.git

fastgit 镜像 仓库https://hub.fastgit.org/FreeCAD/FreeCAD.git

gitclone 镜像 仓库https://gitclone.com/github.com/FreeCAD/FreeCAD.git

cnpmjs 镜像 仓库https://github.com.cnpmjs.org/FreeCAD/FreeCAD.git

克隆代码 git clone https://github.com/FreeCAD/FreeCAD.git (如果下不动就换镜像)

我是用的官方的,也就是第一个。具体的版本应该是这个:https://github.com/FreeCAD/FreeCAD/releases/tag/0.18.5

而现在0.19 版本是:https://github.com/FreeCAD/FreeCAD/tree/releases/FreeCAD-0-19

Libpack 支持库包下载

Freecad 的编译需要一些支持库,比如OpenCASCADe, Coin 和 Qt等。

windows 下打包好的支持库安装包,下载地址是:

官方 Libpack 可以去 Github Release 下载 https://github.com/FreeCAD/FreeCAD/releases

社区成员创建的 Libpack https://github.com/apeltauer/FreeCAD/releases(含 OpenCascade 7.5)

我下的是:https://github.com/apeltauer/FreeCAD/releases/tag/LibPack_12.1.4

其内容是:

Visual Studio 2017
OpenSSL 3.0.0
Curl
Qt 5.12.1
PySide2 build against Qt 5.12.1
Coin3D 4.0
Pivy
Python 3.6.8
OpenCascade 7.3
Boost 1.67 (including the debug files build against python_d.exe)

标题上说有点过时,但我电脑上是vs2017,也没找到更新的。vs2019 倒是有最新的。

cmake 配置工程

这个是编译中最重要的部分,其内容就是准备编译的工程。

先把上面下载的解压,我的

源代码是放在:C:\study17\FreeCAD18 下,

而支持库是放在:C:\study17\FreeCADLibs_12.1.4_x64_VC15

运行cmake,在源代码地方,输入我们源代码解压释放的目录,编译结果的地方,我就源代码目录加一个/bin ,或者/build ,保证他和源代码分开就好了,或者其他目录也可。

点击onfigure (配置),这时出现工程编译器选择对话框。当然指定的是: visual studio 15 2017,这里要注意选择x64,因为我们的支持库是x64的,所以这里必须选择x64。 

选好了,点击Finish,就开始配置了。报错出现了,没关系,我们要设置支持库包的路径:这个在FREECAD 项目里,下面的 FREECAD_LIBPACK_DIR,复制或输入libpack 目录到这里。

这里上面有3个包含copy 的项目,勾选好,这样编辑好后 那些支持文件就在程序目录里了。  但是,第一次不会出现这个选项,config 之后,再看就有了。

我第一次配置提示我需要安装SDK,这就是我上面前提里要安装 SDK的意思。

还有一个重要点是: 在 BUILD 项目下,需要勾选 BUILD_QT5:

如果想做安装包,那要设置CMAKE_INSTALL_PREFIX,没有设置的或可能是一个program file 目录了。

还有要取消 BUILD_JTREADER

https://blog.csdn.net/libaineu2004/article/details/95623091 这个博客说选择勾选 BUILD_SANDBOX, BUILD_TEMPLATE,估计你需要这个功能,就勾选。不选只是缺少这个功能。

再配置,如果报错,看看错误,再配置,我第一次就这么好了,显示 Config Done

Created install commands for INSTALL target.

=================================================
Now run 'cmake --build C:/study17/FreeCAD-0.19/build' to build FreeCAD
=================================================

Configuring done

然后点击Generate 产生工程, 产生工程后就可以 Open Projet ,我的不知怎么打开工程是空的。

不过也没关系,我自己打开 visual studio 2017 ,然后打开sln 文件。

编译工程

我在cmake 里不能直接打开工程,所以打开vs2017 ,然后打开freecad.sln:

编译其实很简单,我是选择第一个project : FreecadBase 单独编译这一个,因为我开始下载编译的是0.19_pre。这个编译不成,后面很多个不行,如果all build 最后很久,最后还是不行。我编译的选项是Release ,不想debug ,先编译成再说。

编译完了之后,就all build。但是编译很花时间,我的电脑用了3个小时。

第一次编译有报错,3个工程失败了。细查原因:

110>Generating Code...
110>LINK : fatal error LNK1181: cannot open input file '..\App\Release\_PartDesign.lib'
110>Done building project "PartDesignGui.vcxproj" -- FAILED.
111>------ Build started: Project: ALL_BUILD, Configuration: Release x64 ------
111>Building Custom Rule C:/study17/FreeCAD-0.19/CMakeLists.txt
112>------ Skipped Build: Project: INSTALL, Configuration: Release x64 ------
112>Project not selected to build for this solution configuration 
========== Build: 106 succeeded, 2 failed, 1 up-to-date, 4 skipped ==========

报错信息是这样的:

5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1237): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1889): error C2001: newline in constant
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1891): error C3688: invalid literal suffix '鈥unsupported'; literal operator or literal operator template 'operator ""鈥unsupported' not found
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1891): error C2143: syntax error: missing ')' before 'std::string'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1891): error C2143: syntax error: missing ';' before 'std::string'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1902): error C2001: newline in constant
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1904): error C3688: invalid literal suffix '鈥unsupported'; literal operator or literal operator template 'operator ""鈥unsupported' not found
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1904): error C2146: syntax error: missing ')' before identifier 't'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1904): error C2146: syntax error: missing ';' before identifier 't'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1931): error C3688: invalid literal suffix '鈥with'; literal operator or literal operator template 'operator ""鈥with' not found
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1931): error C2143: syntax error: missing ';' before ':'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1931): error C2059: syntax error: ':'
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1931): error C2017: illegal escape sequence
5>C:\study17\FreeCAD-0.19\src\Mod\PartDesign\App\FeatureHole.cpp(1931): error C2001: newline in constant
5>Generating Code...
5>Done building project "PartDesign.vcxproj" -- FAILED.

FearureHole.cpp 这个文件里有乱码,根据错误提示和行号,很容易找到错误的地方。

1889:throw Base::IndexError(std::string("Thread type ‘") + thread_type_string + "’ unsupported");

1902: throw Base::IndexError(std::string("Cut type ‘") + cut_type_string + "’ unsupported");

1931:std::cerr << "Failed reading ‘" << f.filePath() << "’ with: "<< e.what() << "\n";


排除这几个错误,就全部编译成功了。

========== Build: 3 succeeded, 0 failed, 106 up-to-date, 4 skipped ==========

如果想做安装包,在全部编译成功后,右键点击 INSTALL 工程,然后Projecct Only-> build only INSTALL,这个要些时间,把所有需要的文件复制到cmake_install_prefix 指定的目录下。 

运行验证

转到bin 下的bin ,直接点击 freecad.exe 就启动freecad 界面了。

第一次的时候,没有勾选那3个copy 选项,提示缺少文件信息。

后来勾选后,再生成工程,编译,有点费时间。

再后来编译0.19 版的时候,我又忘了勾选,但又编译好了。 我看勾选后在配置里就复制文件了。是不是不形成工程就完成了复制,那我就不形成工程,果真还可以。

所以,万一忘记勾选那3个copy ,也不要紧,勾选配置一下,让配置完成copy 就好了,不用新形成工程。copy 与工程无关,只是配置的时候,帮你完成必要的复制。

故障排除

这里主要指cmake 配置失败的情况

我第一次很顺利地配置成功了,但后来总是有各种问题,导致配置不成,主要是各种路径设置不对 。比如下面的情况:

这是python 路径问题,很多问题都是python设置不好导致的:

下面是boost 问题: 

遇到这种情况让人很郁闷,后来我就对照原来配置好的,直接设置纠正过来,这样还真有效。

你可能第一次就不成功,那你就对照下面输入信息。一般都是你libpack 目录下的文件名或者目录,我这里的libpack 目录是 C:/study17/FreeCADLibs_12.1.4_x64_VC15。

编译就介绍这么多了。

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/114157473