Compile on Windows: Difference between revisions

From FreeCAD Documentation
(more Cmake update)
(Grammar)
 
(231 intermediate revisions by 11 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<translate>
<translate>

<!--T:109-->
<!--T:109-->
{{Docnav
{{docnav|Tracker|CompileOnUnix}}
|[[Licence|Licence]]
|[[Compile_on_Linux|Compile on Linux]]
}}

</translate>
{{TOCright}}
<translate>


<!--T:1-->
<!--T:1-->
This article explains step by step '''how to compile FreeCAD on Windows'''.
This page explains step by step '''how to compile FreeCAD 0.19 or newer on Windows''' using Microsoft's MSVC compiler. For information on using MSYS2/MinGW see [[Compile_on_MinGW|Compile on MinGW]]. For other platforms see [[Compiling|Compiling]].

<!--T:74-->
See also
* [[Compile_on_Windows_with_VS2013|Compile on Windows with Visual Studio 2013]]
* [[Compiling_(Speeding_up)|Compiling - Speeding up]]


== Prerequisites == <!--T:2-->
== Prerequisites == <!--T:2-->


<!--T:136-->
<!--T:136-->
Compiling FreeCAD on Windows requires several tools and libraries.
At first you must install the following required programs ad libraries:


===Required=== <!--T:100-->
===Required=== <!--T:100-->

<!--T:226-->
* A compiler. FreeCAD is tested with Visual Studio (MSVC)—other compilers may work, but instructions for use are not included here. Fore more details, see the section [[#Compiler|Compiler]] below.


<!--T:116-->
<!--T:116-->
* [http://git-scm.com/ Git] (There are also a GUI frontends available for Git, see the next section.)
* [http://git-scm.com/ Git] (There are also GUI frontends available for Git, see the next section.)

* [http://www.cmake.org/cmake/resources/software.html CMake] version 3.11.x - 3.14.x. '''Note:''' Usually one cannot take the latest CMake version. Therefore only use a CMake version in the range specified on this page!<br>It is recommended to use the option ''Add CMake to the system PATH for all users'' when installing CMake. Then you can later easily access CMake also from the command line/powershell.
<!--T:170-->
* LibPack (also called FreeCADLibs). This is a set of libraries necessary to compile FreeCAD on Windows. Depending on the FreeCAD version you want to compile, you must download the corresponding LibPack. For example to compile FreeCAD 0.18, download either the 32bit or the 64bit version of the [https://github.com/FreeCAD/FreeCAD-ports-cache/releases/tag/v0.18 LibPack for 0.18], to compile the latest development version 0.19, download the [https://github.com/FreeCAD/FreeCAD/releases/tag/0.19_pre LibPack for 0.19] (there is only a 64bit version).<br>Just download the LibPack, you will unpack and set it up later.<br>'''Note''': It is recommended to use the same compiler ''MS Visual Studio'' (MSVC) version the LibPack is designed for. This assures that the compilation and the execution of the compiled FreeCAD.exe succeeds. So you should for example be able to compile FreeCAD 0.18 using the LibPack for 0.19 and MSVC 15 but you you might get problems compiling FreeCAD 0.18 using the LibPack for 0.18 and MSVC 15 because the LibPack for 0.18 is designed to be built with MSVC&nbsp;12.
* [https://cmake.org/download/ CMake] version 3.11.x or newer. </br> ''Hint:'' Choosing the option ''Add CMake to the system PATH for all users'' when installing CMake will make CMake accessible from the Windows command prompt, which can be useful.

<!--T:172-->
* The [https://github.com/FreeCAD/FreeCAD-LibPack LibPack]. This is a single package containing all of the libraries necessary to compile FreeCAD on Windows. Download the version of the LibPack that corresponds to the version of FreeCAD you want to compile. To compile FreeCAD 0.20 download the [https://github.com/FreeCAD/FreeCAD-LibPack/releases/tag/2.6 LibPack version 2.6], for FreeCAD 0.19 download the [https://github.com/FreeCAD/FreeCAD-LibPack/releases/tag/1.0 LibPack version 1.0]. Extract the LibPack to a convenient location. (If your computer does not recognize the .7z extension, you must install the program [https://www.7-zip.org 7-zip].) </br> '''Note''': It is highly recommended to compile FreeCAD with the compiler version the LibPack is designed for. For example, you might run into problems compiling FreeCAD 0.20 using MSVC&nbsp;2017 because the LibPack is designed to be built with MSVC&nbsp;2019 or newer.</br>To update your LibPack later, see the section [[#Updating_the_LibPack|Updating the LibPack]].


===Optional programs=== <!--T:137-->
===Optional programs=== <!--T:137-->
* [https://www.python.org/downloads/ Python 3.x]. A separate python installation is not mandatory since the LibPack contains Python. However, to be able to test later your FreeCAD build it is useful to have a standalone Python installation. It is recommended to use not the latest version, but the prior version (e.g. not Python 3.7 but 3.6).
* A GUI frontend for Git. There are several frontends available, see [https://en.wikipedia.org/wiki/Comparison_of_Git_GUIs this list]. The main benefit of a frontend is that you don't have to learn the Git commands to get the source code of FreeCAD or to send patches to the GitHub repository of FreeCAD.<br>In the following we describe source code handling using the frontend [https://tortoisegit.org/ TortoiseGit]. This frontend integrates directly to Windows file explorer and has a large user community to get help in case you have problems.
* [http://sourceforge.net/projects/nsis/ NSIS] This is the program to generate the Windows installer of FreeCAD. (Information: For FreeCAD 0.17 and older the program [http://wixtoolset.org/ WiX] was used to create the installer.)


===Source Code=== <!--T:98-->
<!--T:176-->
* A GUI frontend for Git. There are several frontends available, see [https://en.wikipedia.org/wiki/Comparison_of_Git_GUIs this list]. The main benefit of a frontend is that you don't have to learn the Git commands to get the source code of FreeCAD or to send patches to the GitHub repository of FreeCAD.

<!--T:177-->
In the following we describe source code handling using the [https://tortoisegit.org/ TortoiseGit] frontend. This frontend integrates directly into Windows file explorer and has a large user community to get help in case you have problems.

<!--T:178-->
* [http://sourceforge.net/projects/nsis/ NSIS] is used to generate the FreeCAD Windows installer.

===Source code=== <!--T:98-->


<!--T:143-->
Now you can get the source code of FreeCAD:
Now you can get the source code of FreeCAD:


====Using the Command Line==== <!--T:117-->
====Using a frontend==== <!--T:144-->

<!--T:145-->
When using the [https://en.wikipedia.org/wiki/Comparison_of_Git_GUIs Git frontend] TortoiseGit:
# Create a new folder where the source code will be downloaded.
# Right-click on this folder in the Windows file explorer and select '''Git Clone''' in the context menu.
# A dialog will appear. In it, enter the URL for the FreeCAD Git repository

</translate>
''https://github.com/FreeCAD/FreeCAD.git''
<translate>

<!--T:179-->
and click '''OK'''.

<!--T:180-->
The latest source code will be downloaded from the FreeCAD Git repository and the folder will be tracked by Git.

====Using the command line==== <!--T:117-->


<!--T:102-->
<!--T:102-->
Line 40: Line 75:
</translate>
</translate>
{{Code|code=
{{Code|code=
git clone https://github.com/FreeCAD/FreeCAD.git FreeCAD-code
git clone https://github.com/FreeCAD/FreeCAD.git
}}
}}
<translate>
<translate>

====Using a Frontend====

When using the Git frontend TortoiseGit:
# Create a new folder where the source code should be.
# Right-click on this folder in the Windows file explorer and select in the context menu '''Git Clone'''.
# A dialog will appear. Use there as URL for the FreeCAD repository<br>''https://github.com/FreeCAD/FreeCAD.git''<br>and Click OK.
Now the source code is downloaded and its folder becomes a folder tracked by Git.


===Compiler=== <!--T:71-->
===Compiler=== <!--T:71-->


<!--T:118-->
<!--T:118-->
The default (recommended) compiler is MS Visual Studio (MSVC). Though it may be possible to use other compilers using Cygwin or MinGW gcc it is not tested or ported so far.
The default (recommended) compiler is MS Visual Studio (MSVC). Though it may be possible to use other compilers, for example gcc via Cygwin or MinGW, it is not tested or covered here.


<!--T:146-->
You can get a free version of MSVC (for OpenSource usage) by downloading the ''Community'' edition of MS Visual Studio. To do so, use this URL<br><nowiki>https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=xx</nowiki><br>where xx is the version number. So to get MSVC 15 (calso called MSVC 2017), use this URL:<br>https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=15
You can get a free version of MSVC (for individual usage) by downloading the [https://visualstudio.microsoft.com/vs/community/ ''Community'' edition of MS Visual Studio].


<!--T:106-->
<!--T:106-->
For those who want to avoid installing the huge MSVC for the mere purpose of having a compiler, see [[CompileOnWindows - Reducing Disk Footprint]].
For those who want to avoid installing the huge MSVC for the mere purpose of having a compiler, see [[CompileOnWindows - Reducing Disk Footprint]].


<!--T:147-->
'''Note:''' Despite that the ''Community'' edition of MSVC is free, you must create a Microsoft account from withing the MSVC IDE that you can use the IDE for more than 30 days. If you will only compile using the command line, you don't need the IDE and thus no Microsoft account.
'''Note:''' Although the ''Community'' edition of MSVC is free, to use the IDE for more than a 30-day trial period you must create a Microsoft account. If you will only compile using the command line, you don't need the IDE and thus no Microsoft account.


===System Path Configuration=== <!--T:5-->
<!--T:184-->
As a free and OpenSource alternative IDE you can use [https://www.kdevelop.org/download KDevelop]. You can use KDevelop to modify and write C++ code but must use the command line to compile.

===Optional system path configuration=== <!--T:5-->


<!--T:121-->
<!--T:121-->
Optionally you can include the paths to some folders to the system PATH variable. This is helpful if you want to access programs in these folders from the command line/powershell or if you want special programs to be found by the compiler or CMake. Besides this, adding folders to the PATH might be necessary if you did not use the corresponding options when installing the program.
Inside your system path be sure to set the correct paths to the following programs:

* git (not tortoiseGit, but git.exe) This is necessary for Cmake to properly update the "About FreeCAD" information in the version.h file which allows FreeCAD to report the proper version in About FreeCAD from the help menu.
<!--T:148-->
*Optionally you can include the Libpack in your system path. This is useful if you plan to build multiple configurations/versions of FreeCAD, you will need to copy less files as explained later in the build process.
* You can include the folder of your LibPack in your system PATH variable. This is useful if you plan to build multiple configurations/versions of FreeCAD.
* If you did not use the option to add CMake to the PATH while installing it, add its installation folder

<!--T:185-->
''C:\Program Files\CMake\bin'' to the PATH.
* If you did not use the option to add TortoiseGit to the PATH while installing it, add its installation folder

<!--T:186-->
''C:\Program Files\TortoiseGit\bin'' to the PATH.


<!--T:104-->
<!--T:104-->
To add to your system path:
To add folder paths to the PATH variable:
# In the Windows Start menu Right click on ''Computer'' and choose ''Properties''.
# In the appearing dialog click on ''Advanced system settings''.
# Another dialog will open. Click there in the tab ''Advanced'' on '''Environment Variables'''.
# Again another dialog will open. Select then the variable ''Path'' and click on '''Edit'''.
# And again another dialog will open. Click there on '''New''' and add to path to the folder of Git or the LibPack.
# Finally press '''OK''' and close all dialogs by pressing '''OK''' as well.


<!--T:105-->
== Configuration == <!--T:6-->
* Start menu → Right click on Computer → Properties → Advanced system settings
* Advanced tab → Environment Variables...
* Add the PATH/TO/GIT to the '''PATH'''
* It should be separated from the others with a semicolon `;`


== Configuration with CMake == <!--T:6-->
<!--T:227-->
Once you have all of the necessary tools, libraries, and FreeCAD source code, you are ready to begin the configuration and compilation process. This process will proceed in five steps:
# Run CMake once to examine your system and begin the configuration progress (this will report that it failed).
# Adjust necessary CMake settings to set the locations of the LibPack and enable Qt5.
# Re-run CMake to finalize the configuration (this time it should succeed).
# Use CMake to generate the Visual Studio build system.
# Use Visual Studio to build FreeCAD.

===CMake=== <!--T:151-->


<!--T:123-->
<!--T:123-->
First, configure the build environment using CMake:
The first step to build FreeCAD is to configure the environment:
# Open the CMake GUI
# Open the CMake GUI
# Specify there the source folder
# Specify the source folder of FreeCAD.
# Specify a build folder. This can be '''build''' in the folder you cloned the repo because this path is ignored by git. Do not use the source folder. CMake will create this folder if it does not exist.
# Specify the build folder
# Click '''Configure'''
# Click '''Configure'''.
# In the appearing dialog specify the generator according to the one you want to use. For the standard MS Visual Studio use ''Visual Studio xx 2yyy'' where xx is the compiler version ad yyy the year of its release. It is recommended to use the default option ''Use default native compilers''. '''Note:''' it is important to specify the correct bit variant. if you have the 64bit variant of LibPack you must also use the x64 compiler.
# In the dialog that appears specify the generator you want to use: in most cases you will use the defaults in this dialog. For the standard MS Visual Studio use ''Visual Studio xx 2yyy'' where xx is the compiler version and 2yyy the year of its release. It is recommended to use the default option ''Use default native compilers''.

<!--T:187-->
'''Note:''' It is important to specify the correct bit variant. If you have the 64-bit variant of the LibPack you must also use the x64 compiler.


<!--T:76-->
<!--T:76-->
This will begin the configuration and will fail because of missing settings. Therefore now:
This will begin the configuration and ''will fail'' because of missing settings. This is normal, you have not yet specified the location of the LibPack. However, there are other failures that might occur that require some further action on your part.

# Search in CMake for the variable '''FREECAD_LIBPACK_DIR''' and specify there the correct location to the LibPack folder.
<!--T:152-->
# Search for the variable '''BUILD_QT5''' and enable this option.
If it fails with the message that Visual Studio could not be found, the CMake support in MSVC is not yet installed. To do this:
# Click '''Configure''' again
# Open the MSVC IDE
# Use the menu Tools → Get Tools and Features
# In the ''Workloads'' tab enable ''Desktop development with C++''
# On the right side you should now see that the component ''Visual C++ tools for CMake'' will be installed.
# Install it.

<!--T:219-->
If it fails with a message about the wrong Python version or missing Python, then:
# Use the "Search:" box in CMake to search for the string "Python"
# If you see there a path like ''C:/Program Files/Python38/python.exe'', CMake recognized the Python that is already installed on your PC, but that version is not compatible with the LibPack. Since the LibPack includes a compatible version of Python, modify the following Python settings in CMake to its paths (assuming the LibPack is in the folder ''D:/FreeCAD-build/FreeCADLibs_2_8_x64_VC2019''):
[[File:CMake_Python_settings.png]]

<!--T:153-->
If there is no error about Visual Studio or Python, everything is fine, but CMake does not yet know all necessary settings. Therefore now:
# Search in CMake for the variable '''FREECAD_LIBPACK_DIR''' and specify the location of the LibPack folder you downloaded earlier.
# (''If building FreeCAD 0.19'') Search for the variable '''BUILD_QT5''' and enable this option.
# (''If planning on running directly from the build folder such as for debugging'') Search for and enable the following options:
#* '''FREECAD_COPY_DEPEND_DIRS_TO_BUILD'''
#* '''FREECAD_COPY_LIBPACK_BIN_TO_BUILD'''
#* '''FREECAD_COPY_PLUGINS_BIN_TO_BUILD'''
# Click '''Configure''' again.


<!--T:138-->
<!--T:138-->
There should now be no errors. If so, click on '''Generate'''. After this is done you could close CMake and continue to start the compilation of FreeCAD. However, for the first compilation keep it open for the case that you want or need to change some options for the build process:
There should now be no errors. If you continue to encounter errors that you cannot diagnose, visit the [https://forum.freecadweb.org/viewforum.php?f=4 Install/Compile forum] on the FreeCAD forum website. If CMake proceeded correctly, click on '''Generate'''. After this is done you can close CMake and start the compilation of FreeCAD using Visual Studio. However, for the first compilation keep it open in case you want or need to change some options for the build process.


=== Options for the Build Process === <!--T:77-->
=== Options for the build process === <!--T:77-->


<!--T:78-->
<!--T:78-->
The CMake build system gives you the flexibility over the build process. That means you can switch on and off some features or modules. (It is in a way like the Linux kernel build.)
The CMake build system gives you control over some aspects of the build process. In particular, you can switch on and off some features or modules using CMake variables.


<!--T:79-->
<!--T:79-->
Here is a description for some of these switches:
Here is a description of some of these variables:


<!--T:80-->
<!--T:80-->
{| class="wikitable" style="text-align:left"
{| class="wikitable" style="text-align:left"
|+ Link table
|-
|-
! Variable name !! Description !! Default
! Variable name !! Description !! Default
|-
|-
| BUILD_XXX || Build FreeCAD with the component XXX. If you don't want/need to compile e.g. the workbench ''OpenSCAD'', disable the variable ''BUILD_OPENSCAD''. FreeCAD will then not have this workbench.
| BUILD_GUI || Build FreeCAD with all Gui related modules || ON
'''Note:''' Some components are required for other components. If you for example uncheck ''BUILD_ROBOT'' CMake will inform you that then the component ''Path'' cannot be compiled correctly. Therefore check the CMake output after you changed a BUILD_XXX option!
|-
|| depends
| CMAKE_INSTALL_PREFIX || The output folder when building the target ''INSTALL'', see also section [[#Running and installing FreeCAD|Running and installing FreeCAD]] || Windows' default program installation folder
|-
|-
| BUILD_ENABLE_CXX_STD || The version of the C++ language standard. '''C++14''' is the highest possible for FreeCAD 0.19 while at least '''C++17''' is required for FreeCAD 0.20. See also the note in the section [[#Release_Build|Building with Visual Studio 15 (2017) and 16 (2019)]]
| FREECAD_COPY_LIBPACK_BIN_TO_BUILD || Copies the LibPack libraries needed to execute the FreeCAD.exe to the build folder. See also section [[#Running and installing FreeCAD|Running and installing FreeCAD]] || OFF
|| depends
|-
|-
| FREECAD_LIBPACK_USE || Switch the usage of the FreeCAD LibPack on or off || ON
| BUILD_DESIGNER_PLUGIN|| To build the Qt Designer plugin, see [[Compile_on_Windows#Qt_Designer_plugin|this section below]] || OFF
|-
|-
| BUILD_FLAT_MESH|| Necessary to have a build that includes the [[MeshPart_CreateFlatMesh|CreateFlatMesh feature]] || OFF
|-
| CMAKE_INSTALL_PREFIX || The output folder when building the target ''INSTALL'', see also the section [[#Running and installing FreeCAD|Running and installing FreeCAD]] || Windows default program installation folder
|-
| FREECAD_COPY_DEPEND_DIRS_TO_BUILD || Copies depending libraries needed to execute the FreeCAD.exe to the build folder. See also the section [[#Running and installing FreeCAD|Running and installing FreeCAD]].</br> '''Note:''' the options FREECAD_COPY_XXX only appear if the libraries were not already copied. If you only need to upgrade/change to another LibPack version, see the section [[#Updating_the_LibPack|Updating the LibPack]]. If you want to bring back the options for some reason, you need to delete all folders in your build folder, except for the LibPack folder. In CMake delete the cache and start as if you compile for the first time. || OFF
|-
| FREECAD_COPY_LIBPACK_BIN_TO_BUILD || Copies the LibPack binaries needed to execute the FreeCAD.exe to the build folder. See also the section [[#Running and installing FreeCAD|Running and installing FreeCAD]]. || OFF
|-
| FREECAD_COPY_PLUGINS_BIN_TO_BUILD|| Copies Qt's plugin files needed to execute the FreeCAD.exe to the build folder. See also the section [[#Running and installing FreeCAD|Running and installing FreeCAD]]. || OFF
|-
| FREECAD_LIBPACK_USE || Switch the usage of the FreeCAD LibPack on or off || ON
|-
| FREECAD_LIBPACK_DIR || Directory where the LibPack is || FreeCAD's source code folder
| FREECAD_LIBPACK_DIR || Directory where the LibPack is || FreeCAD's source code folder
|-
| FREECAD_RELEASE_PDB || Create debug libraries (*.pdb) also for release builds. It doesn't affect the speed (like a real debug build would do) and can be very useful to locate crashes in FreeCAD code. In case FreeCAD crashes a ''crash.dmp'' file will be created that can be loaded with MSVC and if you have the corresponding PDB files plus the source code of that version you can debug through the code. Without the PDB files it's not possible to debug the code and all what the debugger shows is the name of the DLL where the crash has occurred. || ON
|-
| FREECAD_USE_MP_COMPILE_FLAG || Adds the /MP (multiprocessor) option to the Visual Studio projects, enabling speedups on multi-core CPUs. This can greatly accelerate builds on modern processors.</br>'''Note:''' If you turn off '''FREECAD_USE_PCH''', the compilation can quickly overload your heap space, even if you have 16 GB RAM. || ON
|-
| FREECAD_USE_PCH || [https://en.wikipedia.org/wiki/Precompiled_header Precompiles the headers] in order to save compilation time. || ON
|-
| FREECAD_USE_PYBIND11|| Includes the [https://github.com/pybind/pybind11 PyBind11] library. Necessary to have a build that includes the [[MeshPart_CreateFlatMesh|CreateFlatMesh feature]].</br>'''Note:''' after turning it on you might get a configuration error. Just configure again and the problem should go away. || OFF
|}
|}

<!--T:12-->
If you are building with Qt Creator, jump to
[[#Building with Qt Creator|Building with Qt Creator]],
otherwise proceed to
[[#Building with Visual Studio 9 2008|Building with Visual Studio 9 2008]].


== Building FreeCAD == <!--T:81-->
== Building FreeCAD == <!--T:81-->


<!--T:125-->
<!--T:125-->
Depending on your current setup, the process for building FreeCAD will be slightly different. This is due to the differences in available software and software versions for each operating system.
Depending on your compiler, the process for building FreeCAD will be slightly different. In the following sections known workflows are described. If you are building with Qt Creator, jump to [[#Building_with_Qt_Creator_.28outdated.29|Building with Qt Creator (outdated)]], otherwise proceed directly:


<!--T:82-->
The following procedure will work for compiling on Windows Vista/7/8, for XP an alternate VS tool set is required for VS 2012 and 2013, which has not been tested successfully with the current Libpacks. To target XP(both x32 and x64) it is recommended to use VS2008 and Libpack FreeCADLibs_11.0_x86_VC9.7z


</translate>
</translate>
Line 143: Line 228:
<translate>
<translate>


=== Building with Visual Studio 12 2013 === <!--T:83-->
=== Building with Visual Studio 15 (2017) or newer === <!--T:154-->


</translate>
</translate>
Line 149: Line 234:
<translate>
<translate>


<!--T:112-->
==== Release Build ==== <!--T:220-->
Make sure to specify '''Visual Studio 12 x64'''(or the alternate C-Compiler you are using) as the generator in CMake before you continue.


<!--T:90-->
<!--T:155-->
*Start Visual Studio 12 2013 by clicking on the desktop icon created at installation.
# Start the Visual Studio IDE. This can either be done by pressing the button ''Open Project'' in the CMake GUI or by double-clicking on the file ''FreeCAD.sln'' that you find in your build folder.
# In the toolbar of the MSVC IDE assure that you use for the first compilation ''Release''.
# There is a window called ''Solution Explorer''. It lists all possible compilation targets. To start a full compilation, right-click on the target '''ALL_BUILD''' and then choose '''Build'''.
This will now take quite a long time.


<!--T:91-->
<!--T:156-->
To compile a ready-to use FreeCAD, compile the target ''INSTALL'', see the section [[#Running and installing FreeCAD|Running and installing FreeCAD]].
*Open the project by:
File → Open → Project/Solution


<!--T:92-->
<!--T:157-->
If you don't get any errors you are done. '''Congratulations!''' You can exit MSVC or keep it open.
*Open FreeCAD_Trunk.sln from the build folder CMake created


<!--T:93-->
<!--T:237-->
'''Important:''' Since Visual Studio 17.4 you cannot use the code optimization that is on by default for the target '''SketcherGui'''. If you do, angle constraints will be misplaced in sketches. To fix this, right-click on this target in the MSVC solution explorer and select the last entry '''Properties''' in the context menu. In the appearing dialog go to C/C++ → Optimization and there disable the setting '''Optimization'''. Finally build the target '''ALL_BUILD''' again.
*Switch the Solutions Configuration drop down at the top to '''Release''' '''X64'''
This may take a while depending on your sytem


<!--T:94-->
==== Debug Build ==== <!--T:222-->
*Build → Build Solution


<!--T:95-->
<!--T:223-->
For a debug build it is necessary that the Python is used that is included in the LibPack. To assure this:
*This will take a long time...
# Search in the CMake GUI for "Python"
# If you see there a path like ''C:/Program Files/Python38/python.exe'', CMake recognized the Python that is installed on your PC and not the one of the LibPack. In this case adapt these different Python settings in CMake to this (assuming the LibPack is in the folder ''D:\FreeCAD-build\FreeCADLibs_12.5.2_x64_VC17''):
[[File:CMake_Python_settings.png]]


<!--T:96-->
<!--T:256-->
As prerequisite for the debug build, you need to do this:
If you don't get any errors you are done. Exit Visual Studio and start FreeCAD by double clicking the FreeCAD icon in the bin folder of the build directory.
# Copy the content of the LibPack folder ''bind'' to the ''bin'' folder of the FreeCAD build folder (overwrite the existing files).
</translate>
# Copy the content of the LibPack folder ''libd'' to the ''lib'' folder of the FreeCAD build folder.
</div>
</div>
<div class="mw-collapsible mw-collapsed toccolours">
<translate>


<!--T:224-->
=== Building with Visual Studio 9 2008 === <!--T:84-->
Now you can compile:
# Start the Visual Studio IDE. This can either be done by pressing the button ''Open Project'' in the CMake GUI or by double-clicking on the file ''FreeCAD.sln'' that you find in your build folder.
# In the toolbar of the MSVC IDE assure that you use for the first compilation ''Debug''.
# There is a window called ''Solution Explorer''. It lists all possible compilation targets. To start a full compilation, right-click on the target '''ALL_BUILD''' and then choose '''Build''' in the context menu.
This will now take quite a long time.


<!--T:257-->
</translate>
If there were no compilation errors, and if the '''FREECAD_COPY_*''' options mentioned in the [[#CMake|CMake Configuration step]] above were enabled, you can start the debug build:
<div class="mw-collapsible-content">
# Right-click on the target '''FreeCADMain''' and then choose '''Set as Startup Project''' in the context menu.
<translate>
# Finally click in the toolbar on the button with the green triangle named '''Local Windows Debugger'''.


<!--T:113-->
<!--T:225-->
This will start the debug build of FreeCAD and you can use the MSVC IDE to debug it.
{{Note|Warning|Since early 0.17 cycle Freecad uses c++11 features that are not supported by 2008 version}}


<!--T:218-->
==== Video Resource ====
An English language tutorial that begins with configuration in CMake Gui and continues to the `Build` command in Visual Studio 16 2019 is available unlisted on YouTube at [https://youtu.be/s4pHvlDOSZQ Tutorial: Build FreeCAD from source on Windows 10].
</translate>
</translate>
</div>
</div>
</div>
</div>


<div class="mw-collapsible mw-collapsed toccolours">
<div class="mw-collapsible mw-collapsed toccolours">
<translate>
<translate>


=== Building with Qt Creator === <!--T:88-->
=== Building with Qt Creator (outdated) === <!--T:88-->


</translate>
</translate>
Line 222: Line 313:
*** Uncheck: Always deploy project before running it
*** Uncheck: Always deploy project before running it


==== Import project and Build ==== <!--T:62-->
====Import project and building==== <!--T:62-->


<!--T:127-->
<!--T:127-->
Line 244: Line 335:
</div>
</div>
</div>
</div>


<div class="mw-collapsible mw-collapsed toccolours">
<div class="mw-collapsible mw-collapsed toccolours">
<translate>
<translate>


=== Command line build === <!--T:66-->
===Command line build=== <!--T:66-->


</translate>
</translate>
<div class="mw-collapsible-content">
<div class="mw-collapsible-content">
<translate>

<!--T:158-->
The steps how to compile from the command line depends on the compiler. For MSVC 2017 the steps are:
# In Windows start menu go to {{MenuCommand|Visual Studio 2017 → Visual Studio Tools}} and choose '''Developer Command Prompt for VS 2017'''
# Change to your build folder.
# Execute the command

</translate>
{{Code|code=msbuild ALL_BUILD.vcxproj /p:Configuration=Release}}
<translate>

<!--T:190-->
or

</translate>
{{Code|code=msbuild INSTALL.vcxproj /p:Configuration=Release}}
<translate>
<translate>


<!--T:114-->
<!--T:114-->
These steps can also be automaized. Here is for example a solution for MSVC 2017:
Here an example how to build FreeCAD from the Command line:
# Download the script [https://forum.freecadweb.org/download/file.php?id=92135 compile-FC.txt].
# Rename it to ''compile-FC.bat''
# In Windows file explorer Shift+Right-click on your build folder and use from the context menu ''Command prompt here''.
# Execute the command

</translate>
{{Code|code=compile-FC install}}
<translate>

<!--T:191-->
Instead of calling '''compile-FC''' with the option ''install'' you can also use ''debug'' or ''release'':

<!--T:192-->
''debug'' &nbsp; - compile FreeCAD in debug configuration

<!--T:193-->
''release'' - compile FreeCAD in release configuration

<!--T:194-->
''install'' &nbsp;&nbsp; - compile FreeCAD in release configuration and create an install setup


</translate>
</translate>
{{Code|code=
rem @echo off
rem Build script, uses vcbuild to completetly build FreeCAD
rem update trunc
d:
cd "D:\_Projekte\FreeCAD\FreeCAD_0.9"
"C:\Program Files (x86)\Subversion\bin\svn.exe" update
rem set the aprobiated Variables here or outside in the system
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
set INCLUDE=
set LIB=
rem Register VS Build programms
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
rem Set Standard include paths
set INCLUDE=%INCLUDE%;%FrameworkSDKDir%\include
set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
rem Set lib Pathes
set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
set LIB=%LIB%;%PROGRAMFILES%\Microsoft Visual Studio\VC98\Lib
rem Start the Visuall Studio build process
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe" "D:\_Projekte\FreeCAD FreeCAD_0.9_build\FreeCAD_trunk.sln" /useenv
}}
</div>
</div>
</div>
</div>

<translate>
<translate>


== Running and installing FreeCAD == <!--T:139-->
==Running and installing FreeCAD== <!--T:139-->


<!--T:140-->
<!--T:140-->
There are 2 methods to run the compiled FreeCAD:
There are 2 methods to run the compiled FreeCAD:

# You execute the FreeCAD.exe that you find in your build folder in the subfolder ''bin''
<!--T:195-->
# You build the target ''INSTALL''
''Method 1'': You execute the FreeCAD.exe that you find in your build folder in the subfolder ''bin''

<!--T:196-->
''Method 2'': You build the target ''INSTALL''


<!--T:141-->
<!--T:141-->
Method 2 is the simpler one because it automatically assures that all libraries needed to run the FreeCAD.exe are in the correct folder. The FreeCAD.exe and the libraries will be output in the folder you specified in the CMake variable ''CMAKE_INSTALL_PREFIX''.<br>
Method 2 is the simpler one because it automatically assures that all libraries needed to run the FreeCAD.exe are in the correct folder. The FreeCAD.exe and the libraries will be output in the folder you specified in the CMake variable ''CMAKE_INSTALL_PREFIX''.
For FreeCAD 0.19 there is currently only one issue that requires your action:
# Download the file [https://forum.freecadweb.org/download/file.php?id=90273 qwindowsvistastyle.zip] from the FreeCAD forum.
# Create a new subfolder named ''styles'' in the ''bin'' folder.
# Extract the ZIP-file to this folder.
This adds the necessary style to make FreeCAD look like a normal Win 10 program, otherwise it looks like in Windows 98.


<!--T:142-->
<!--T:142-->
For Method 1 you need to put the libraries into the ''bin'' folder of your build folder (where the FreeCAD.exe is). This can easily be done, by using the CMake variable option ''FREECAD_COPY_LIBPACK_BIN_TO_BUILD''.
For Method 1 you need to enable the '''FREECAD_COPY_*''' options mentioned in the [[#CMake|CMake Configuration step]] above.


== Building FreeCAD older than version 0.9 == <!--T:67-->
===Troubleshooting=== <!--T:238-->


=== Using LibPack === <!--T:68-->
<!--T:239-->
When running FreeCAD you may encounter missing DLLs when using certain workbenches or features of workbenches. The error message in FreeCAD's console will not tell you what DLL is missing. To find this out you must use an external tool:


<!--T:128-->
<!--T:240-->
* Download the latest release of the program '''Dependencies''': https://github.com/lucasg/Dependencies/releases (choose the file ''Dependencies_x64_Release.zip'')
To make it easier to get FreeCAD compiled, we provide a collection of all
* In the FreeCAD [[Python console]] execute these commands:
needed libraries. It's called the [[Third Party Libraries|LibPack]]. You can find it on the [http://sourceforge.net/project/showfiles.php?group_id=49159 download page] on
<nowiki>import os
sourceforge.
os.system(r"~\DependenciesGui.exe")</nowiki>
'''Note''': Instead of the ~ you must specify the full path to the ''DependenciesGui.exe'' on your system.
* Now drag in the *.pyd file of the workbench with which you get missing DLLs reported.


<!--T:26-->
==Updating the build== <!--T:160-->
You need to set the following environment variables:


<!--T:27-->
<!--T:161-->
FreeCAD is very actively developed. Therefore its source code changes almost daily. New features are added and bugs are fixed. To benefit from these source code changes, you must rebuild your FreeCAD. This is done in two steps:
:'''FREECADLIB''' = "D:\Wherever\LIBPACK"
# Updating the source code
# Recompilation


<!--T:28-->
===Updating the source code=== <!--T:162-->
:'''QTDIR''' = "%FREECADLIB%"


<!--T:29-->
====Using a frontend==== <!--T:163-->
Add "%FREECADLIB%\bin" and "%FREECADLIB%\dll" to the system ''PATH'' variable. Keep in mind that you have to replace "%FREECADLIB%" with the path name, since Windows does not recursively replace environment variables.


<!--T:164-->
==== Directory setup in Visual Studio ==== <!--T:30-->
When using the [https://en.wikipedia.org/wiki/Comparison_of_Git_GUIs Git frontend] TortoiseGit:
# Right-click on your FreeCAD source code folder in the Windows file explorer and select '''Pull''' in the context menu.
# A dialog will appear. Select there what development branch you want to get. '''master''' is the main branch. Therefore use this unless you want to compile a special new feature from a branch that has not yet been merged to ''master''. (For more about Git branches, see [[Source_code_management#Git_development_process|Git development process]].)


<!--T:129-->
<!--T:198-->
Finally click '''OK'''.
Some search path of Visual Studio need to be set.
To change them, use the menu ''Tools→Options→Directory


===== Includes ===== <!--T:31-->
====Using the command line==== <!--T:165-->


<!--T:130-->
<!--T:166-->
Open a terminal (command prompt) and switch there to your source directory. Then type:
Add the following search path to the include path search list:
* %FREECADLIB%\include
* %FREECADLIB%\include\Python
* %FREECADLIB%\include\boost
* %FREECADLIB%\include\xercesc
* %FREECADLIB%\include\OpenCascade
* %FREECADLIB%\include\OpenCV
* %FREECADLIB%\include\Coin
* %FREECADLIB%\include\SoQt
* %FREECADLIB%\include\QT
* %FREECADLIB%\include\QT\Qt3Support
* %FREECADLIB%\include\QT\QtCore
* %FREECADLIB%\include\QT\QtGui
* %FREECADLIB%\include\QT\QtNetwork
* %FREECADLIB%\include\QT\QtOpenGL
* %FREECADLIB%\include\QT\QtSvg
* %FREECADLIB%\include\QT\QtUiTools
* %FREECADLIB%\include\QT\QtXml
* %FREECADLIB%\include\Gts
* %FREECADLIB%\include\zlib


</translate>
===== Libs ===== <!--T:32-->
{{Code|code=
git pull https://github.com/FreeCAD/FreeCAD.git master
}}
<translate>


<!--T:131-->
<!--T:167-->
where ''master'' the the name of the main development branch. If you want to get code from another branch, use its name instead of ''master''.
Add the following search path to the lib path search list:
* %FREECADLIB%\lib


===== Executables ===== <!--T:33-->
===Recompilation=== <!--T:168-->


<!--T:132-->
<!--T:169-->
# Open the MSVC IDE by double-clicking either on the file ''FreeCAD.sln'' or on the file ''ALL_BUILD.vcxproj'' in your build folder.
Add the following search path to the executable path search list:
# Continue with step 2 from the section [[#Building_with_Visual_Studio_15_.282017.29_or_newer|Building with Visual Studio 15 2017]].
* %FREECADLIB%\bin
* TortoiseSVN binary installation directory, usually "C:\Programm Files\TortoiseSVN\bin", this is needed for a distribution build when ''SubWVRev.exe'' is used to extract the version number from Subversion.


==== Python needed ==== <!--T:34-->
==Updating the LibPack== <!--T:253-->


<!--T:133-->
<!--T:254-->
If a new major version of a third-party dependency like Open Cascade is released, or if a third-party dependency has important bug fixes, a new LibPack is released. You can find the latest version [https://github.com/FreeCAD/FreeCAD-LibPack/releases/ here].
During the compilation some Python scripts get executed. So the Python
interpreter has to function on the OS. Use a command box to check it. If
the Python library is not properly installed you will get an error message
like ''Cannot find python.exe''. If you use the LibPack you can also use the
python.exe in the bin directory.


==== Special for VC8 ==== <!--T:35-->
<!--T:255-->
To update your LibPack the following recipe is best practice:
# Delete the ''bin'' folder in your build folder.
# Switch to your local LibPack folder and delete everything there.
# Extract the content of the new LibPack ZIP file into the existing, but now empty, local LibPack folder.
# Open CMake and there press the button '''Configure''' and then the button '''Generate'''. This recreates the ''bin'' folder you just deleted and also copies the new LibPack files into it.
# In CMake click the button '''Open Project''' and the MSVC IDE will open.
# In the MSVC IDE build the target ''INSTALL''.


<!--T:134-->
==Tools== <!--T:199-->
When building the project with VC8, you have to change the link information for the WildMagic library, since you need a different version for VC6 and VC8. Both versions are supplied in ''LIBPACK/dll''. In the project properties for ''AppMesh'' change the library name for the ''wm.dll'' to the VC8 version. Take care to change it in Debug ''and'' Release configuration.


=== Compile === <!--T:36-->
<!--T:200-->
In order to join the FreeCAD development you should compile and install the following tools:


<!--T:37-->
===Qt Designer plugin=== <!--T:201-->
After you conform to all prerequisites the compilation is - hopefully - only a mouse click in VC


=== After Compiling === <!--T:38-->
<!--T:202-->
FreeCAD uses [https://en.wikipedia.org/wiki/Qt_(software) Qt] as toolkit for its user interface. All dialogs are setup in UI-files that can be edited using the program [https://doc.qt.io/qt-5/qtdesigner-manual.html Qt Designer] that is part of any Qt installation and also included in the LibPack. FreeCAD has its own set of Qt widgets to provide special features like adding a unit to input fields and to set preferences properties.


<!--T:135-->
====Compilation==== <!--T:208-->
To get FreeCAD up and running from the compiler environment you need to copy a few files from the [[Third Party Libraries|LibPack]] to the ''bin'' folder where FreeCAD.exe is installed after a successful build:


<!--T:39-->
<!--T:209-->
The plugin cannot be loaded by the Qt Designer if it was compiled using another Qt version than the one your Qt Designer/Qt Creator is based on. Therefore the plugin must be compiled together with FreeCAD:
* ''python.exe'' and ''python_d.exe'' from ''LIBPACK/bin''
* ''python25.dll'' and ''python25_d.dll'' from ''LIBPACK/bin''
* ''python25.zip'' from ''LIBPACK/bin''
* make a copy of ''Python25.zip'' and rename it to ''Python25_d.zip''
* ''QtCore4.dll'' from ''LIBPACK/bin''
* ''QtGui4.dll'' from ''LIBPACK/bin''
* ''boost_signals-vc80-mt-1_34_1.dll'' from ''LIBPACK/bin''
* ''boost_program_options-vc80-mt-1_34_1.dll'' from ''LIBPACK/bin''
* ''xerces-c_2_8.dll'' from ''LIBPACK/bin''
* ''zlib1.dll'' from ''LIBPACK/bin''
* ''coin2.dll'' from ''LIBPACK/bin''
* ''soqt1.dll'' from ''LIBPACK/bin''
* ''QtOpenGL4.dll'' from ''LIBPACK/bin''
* ''QtNetwork4.dll'' from ''LIBPACK/bin''
* ''QtSvg4.dll'' from ''LIBPACK/bin''
* ''QtXml4.dll'' from ''LIBPACK/bin''


<!--T:40-->
<!--T:241-->
* In the CMake options (see [[Compile_on_Windows#Options_for_the_build_process|this section above]]) enable the option BUILD_DESIGNER_PLUGIN and reconfigure.
When using a [[Third Party Libraries|LibPack]] with a Python version older than 2.5 you have to copy two further files:
* open MSVC and build the target '''FreeCAD_widgets'''
* ''zlib.pyd'' and ''zlib_d.pyd'' from ''LIBPACK/bin/lib''. This is needed by python to open the zipped python library.
* ''_sre.pyd'' and ''_sre_d.pyd'' from ''LIBPACK/bin/lib''. This is needed by python for the built in help system.


<!--T:41-->
<!--T:242-->
As result you will get the plugin file '''FreeCAD_widgets.dll'' in the folder</br>''~\src\Tools\plugins\widget\Release''
If you don't get it running due to a Python error it is very likely that one of the ''zlib*.pyd'' files is missing.


<!--T:107-->
====Installation==== <!--T:203-->
Alternatively, you can copy the whole bin folder of libpack into bin folder of the build. This is easier, but takes time and disk space. This can be substited by making links instead of copying files, see [[CompileOnWindows - Reducing Disk Footprint#avoiding copying any libpack files to launch FreeCAD|CompileOnWindows - Reducing Disk Footprint]].


=== Additional stuff === <!--T:42-->
<!--T:205-->
To install the plugin, copy the DLL either to:
* If you use the LibPack: to the folder</br>''~\FreeCADLibs_2_8_x64_VC2019\plugins\designer''
* If you have a full Qt installation: you can choose between the folder</br>''C:\Qt\5.15.2\msvc2019_64\plugins\designer''</br>or</br>''C:\Qt\5.15.2\msvc2019_64\bin\designer'' (you must first create the ''designer'' subfolder.)</br>(adapt the paths to your installation!).


<!--T:43-->
<!--T:206-->
Finally (re)start Qt Designer and check its menu {{MenuCommand|Help → Plugins}}. If the plugin '''FreeCAD_widgets.dll''' is listed as being loaded, you can now design and change FreeCAD's .ui files. If not, you must [[#Compilation|compile]] the DLL by yourself.
If you whant to build the source code documentation you need [http://www.stack.nl/~dimitri/doxygen/ DoxyGen].


<!--T:44-->
<!--T:207-->
If you prefer using [https://en.wikipedia.org/wiki/Qt_Creator Qt Creator] instead of Qt Designer, the plugin file must be placed in this folder:</br>''C:\Qt\Qt5.15.2\Tools\QtCreator\bin\plugins\designer''</br>Then (re)start Qt Creator, switch to the mode '''Design''' and then check the menu {{MenuCommand|Tools → Form Editor → About Qt Designer Plugins}}. If the plugin '''FreeCAD_widgets.dll''' is listed as being loaded, you can now design and change FreeCAD's .ui files. If not, you must [[#Compilation|compile]] the DLL by yourself.
To create an intstaller package you need [http://wix.sourceforge.net/ WIX].


<!--T:45-->
===Thumbnail Provider=== <!--T:211-->
During the compilation some Python scripts get executed. So the Python interpreter has to work properly.


<!--T:46-->
<!--T:212-->
FreeCAD has the feature to provide preview thumbnails for *.FCStd files. That means that in the Windows file explorer *.FCStd files are shown with a screenshot of the model it contains. To provide this feature, FreeCAD needs to have the file '''FCStdThumbnail.dll''' installed to Windows.
For more details have also a look to ''README.Linux'' in your sources.


<!--T:47-->
====Installation==== <!--T:213-->
First of all you should build the Qt plugin that provides all custom widgets of FreeCAD we need for the Qt Designer. The sources are located under


<!--T:214-->
</translate>
The DLL is installed this way:
{{Code|code=
# Download [https://forum.freecadweb.org/download/file.php?id=13404 this ZIP file] and extract it.
//src/Tools/plugins/widget//.
# Open a Windows command prompt with administrator privileges (these privileges are a requirement).
}}
# Change to the folder where the DLL is.
<translate>
# Execute this command {{Code|code=regsvr32 FCStdThumbnail.dll}}


<!--T:48-->
<!--T:215-->
So check if it works, assure that in FreeCAD the preferences option '''[[Preferences_Editor#Document|Save thumbnail into project file when saving document]]''' is enabled and save a model. Then view in Windows Explorer the folder of the saved model using a symbol view. You should now see a screenshot of the model in the folder view.
So far we don't provide a makefile -- but calling
</translate>
{{Code|code=
qmake plugin.pro
}}


====Compilation==== <!--T:216-->
<translate>
<!--T:49-->
creates it. Once that's done, calling ''make'' will create the library


<!--T:217-->
</translate>
To compile the FCStdThumbnail.dll
{{Code|code=
# Change to the FreeCAD source folder</br>''~\src\Tools\thumbs\ThumbnailProvider''
//libFreeCAD_widgets.so//.
# Open the CMake GUI
}}
# Specify there as source folder the one you are currently in.
<translate>
# Use the same folder as build folder.
# Click '''Configure'''
# In the appearing dialog, specify the generator according to the one you want to use. For the standard MS Visual Studio use ''Visual Studio xx 2yyy'' where xx is the compiler version and 2yyy the year of its release. It is recommended to use the default option ''Use default native compilers''.</br>'''Note:''' It is important to specify the correct bit variant. If you have the 64bit variant of LibPack you must also use the x64 compiler.
# Click on '''Generate'''.
# You should now have the file '''ALL_BUILD.vcxproj''' in the folder ''~\src\Tools\thumbs\ThumbnailProvider''. Double-click on it and the MSVC IDE will open.
# In the toolbar of the MSVC IDE assure that you use the compilation target ''Release''.
# There is a window called ''Solution Explorer''. Right-click there on '''ALL_BUILD''' and then choose '''Build'''.
# As result you should now have a '''FCStdThumbnail.dll''' in the folder ''~\src\Tools\thumbs\ThumbnailProvider\release'' that you can install as described above.


<!--T:50-->
== Compiling Open Cascade== <!--T:228-->
To make this library known to your ''Qt Designer'' you have to copy the file to


<!--T:229-->
</translate>
The LibPack comes with a version of [https://en.wikipedia.org/wiki/Open_Cascade Open Cascade] that is suitable for general use. However, under some circumstances you may wish to compile against an alternate version of Open Cascade, such as one of their official releases, or a patched fork.
{{Code|code=
//$QTDIR/plugin/designer//.
}}


<!--T:243-->
<translate>
When compiling Open Cascade for FreeCAD note that there is no guarantee that FreeCAD will work with all versions of Open Cascade. Note also that when you are using the Netgen library, you must use the a NetGen version that it approved to compile with the Open Cascade version you like to compile.


== References == <!--T:115-->
<!--T:231-->
To compile:
* First obtain the Open Cascade source code, either directly from [https://github.com/Open-Cascade-SAS/OCCT Open Cascade's git repository] or by cloning someone else's fork, such as [https://gitlab.com/blobfish/occt the "blobfish" fork] maintained by FreeCAD forum member [https://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=208 tanderson69].


<!--T:232-->
* Then open the CMake GUI to configure the build system in a similar manner to building FreeCAD. These CMake options have to be set (or explicitly not set):
{| class="wikitable" style="text-align:left"
|-
! Variable name !! Description !! Default
|-
| 3RDPARTY_DIR|| The path to 3rdparty components. It is recommended to use the folder as input where your used LibPack is. Explicitly leave this field empty.
|| empty
|-
| 3RDPARTY_DOXYGEN_EXECUTABLE|| The path to the executable of the 3rdparty component [https://en.wikipedia.org/wiki/Doxygen Doxygen]. It is recommended to install Doxygen. CMake will then find it automatically.
|| empty
|-
| 3RDPARTY_FREETYPE_DIR|| The path to the necessary 3rdparty component [https://en.wikipedia.org/wiki/FreeType Freetype]. It is recommended to use the folder as input where your used LibPack is.
|| empty
|-
| 3RDPARTY_RAPIDJSON_DIR|| Only available if '''USE_RAPIDJSON''' is used. The path to the 3rdparty component [https://rapidjson.org/ RapidJSON]. It is recommended NOT to use an existing LibPack folder as input. You can use the RapidJSOn folder from a LibPack, but copy it to a new folder and use this new folder as input.
|| empty
|-
| 3RDPARTY_TCL_DIR|| The path to the necessary 3rdparty component [https://en.wikipedia.org/wiki/Tcl TCL]. It is recommended NOT to use an existing LibPack folder as input. Take for example one of [https://github.com/teclab-at/tcltk/releases these releases], extract it and take this as input folder for CMake.
|| empty
|-
| 3RDPARTY_TK_DIR|| The path to the necessary 3rdparty component [https://en.wikipedia.org/wiki/Tk_(software) TK]. It is recommended NOT to use an existing LibPack folder as input. Take for example one of [https://github.com/teclab-at/tcltk/releases these releases], extract it and take this as input folder for CMake.
|| empty
|-
| 3RDPARTY_VTK_DIR|| Only available if '''USE_VTK''' is used. The path to the necessary 3rdparty component [https://en.wikipedia.org/wiki/VTK VTK]. It is recommended to use the folder as input where your used LibPack is. If you use another folder please assure that you don't use VTK 9.x or newer.
|| empty
|-
| BUILD_RELEASE_DISABLE_EXCEPTIONS|| Disables exception handling for release builds. For FreeCAD you must set it to '''OFF'''.
|| ON
|-
| INSTALL_DIR|| The output folder when building the target ''INSTALL''. If the build was successful, take the files from this folder to update your LibPack.
|| Windows default program installation folder
|-
| INSTALL_DIR_BIN|| The output subfolder for the DLL when building the target ''INSTALL''. You must change it to '''bin'''
|| win64/vc14/bin
|-
| INSTALL_DIR_LIB|| The output subfolder for the .lib files when building the target ''INSTALL''. You must change it to '''lib'''
|| win64/vc14/lib
|-
| USE_RAPIDJSON|| To compile Open Cascade with support for RapidJSON. Enabling this is mandatory in order to get support for the file format [https://en.wikipedia.org/wiki/Gltf glTF].
|| OFF
|-
| USE_VTK|| To compile Open Cascade with support for VTK. Enabling this is optimal. You can use this to build Open Cascade's VTK bridge.
|| OFF
|}


<!--T:69-->
<!--T:244-->
* Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the '''Release''' mode.
{{docnav|Tracker|CompileOnUnix}}
* Repeat building the two targets in the '''Debug''' mode.


<!--T:110-->
<!--T:245-->
To build FreeCAD using the self-compiled Open Cascade, you must do the following:
{{Userdocnavi}}
* Copy all folders from the INSTALL_DIR to your LibPack folder (overwrite the existing files)
* Switch to the LibPack folder and go there to the subfolder ''cmake''
* Open there the file ''OpenCASCADEDrawTargets.cmake'' with a text editor
* Search there for absolute paths to your LibPack folder and remove them. So e.g. the absolute path</br>''D:/FreeCADLibs_12.5.4_x64_VC17/lib/freetype.lib''</br>becomes just </br>''freetype.lib''</br>
* Do the same for the file ''OpenCASCADEVisualizationTargets.cmake''


<!--T:111-->
== Compiling Netgen== <!--T:246-->

[[Category:Developer Documentation]]
<!--T:247-->
The LibPack comes with a version of [https://ngsolve.org Netgen] that will was tested to be build with the Open Cascade version of the LibPack. The problem is that every new release of Netgen changes the API. Also every new release of Open Cascade does the same. Therefore one cannot just easily change the Netgen version.

<!--T:248-->
However, you might build Netgen nevertheless. This is an easy task:

<!--T:249-->
* First obtain the Netgen source code, either directly from [https://github.com/NGSolve/netgen Netgen 's git repository].
* Then open the CMake GUI to configure the build system in a similar manner to building FreeCAD. These CMake options have to be set:
{| class="wikitable" style="text-align:left"
|-
! Variable name !! Description !! Default
|-
| CMAKE_INSTALL_PREFIX|| The output folder when building the target ''INSTALL''. If the build was successful, take the files from this folder to update your LibPack.
|| C:/netgen
|-
| OpenCasCade_DIR|| The path to the CMake files of Open Cascade. If you built Open Cascade as described in the section [[#Compiling_Open_Cascade|Compiling Open Cascade]] you can use the subfolder ''cmake'' of there folder you used as INSTALL_DIR. If not, use the subfolder ''cmake'' of your LibPack. Note hereby that the LibPack must then already contain a proper Open Cascade build. Independent what folder you use, you must now also create there a subfolder ''lib'' and copy in the files ''freetype.lib'' and ''freetyped.lib'' from your LibPack.
|| empty
|-
| USE_GUI|| set it to '''OFF'''
|| ON
|-
| USE_NATIVE_ARCH|| set it to '''OFF'''; this is only necessary important to support older CPU that don't have the [https://en.wikipedia.org/wiki/Advanced_Vector_Extensions AVX2] instruction set
|| ON
|-
| USE_OCC|| set it to '''ON'''
|| OFF
|-
| USE_PYTHON|| set it to '''OFF'''
|| ON
|-
| USE_SUPERBUILD|| set it to '''OFF'''
|| ON
|-
| ZLIB_INCLUDE_DIR|| The path to the necessary 3rdparty component [https://en.wikipedia.org/wiki/Zlib zlib]. It is recommended to use the folder as input where your used LibPack is.
|| empty
|-
| ZLIB_LIBRARY_DEBUG|| The path to the ZLib file ''zlibd.lib''. It is located in the subfolder ''lib'' of your LibPack folder.
|| empty
|-
| ZLIB_LIBRARY_RELEASE|| The path to the ZLib file ''zlib.lib''. It is located in the subfolder ''lib'' of your LibPack folder.
|| empty
|}

<!--T:250-->
* Additionally you need to add a new CMake entry:
name: ''CMAKE_DEBUG_POSTFIX'', type: ''string'', content: '''_d'''</br>
This assures that he file names of the debug libraries get another name than the release libraries and can later not be accidentally exchanged.

<!--T:251-->
* Press the ''Configure'' button in CMake to generate the *.cmake files.
* Only necessary if older CPU should be supported that don't have the AVX2 instruction set:
** Search your Netgen build folder for the file ''netgen-targets.cmake'' and open it with a text editor. Remove the setting '';/arch:AVX2'' in the Option INTERFACE_COMPILE_OPTIONS.
** Press the ''Configure'' button in CMake again.
* Press the ''Generate'' button in CMake.
* Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the '''Release''' mode.
* Repeat building the two targets in the '''Debug''' mode.

<!--T:252-->
To build FreeCAD using the self-compiled Netgen, you must do the following:
* Copy all folders from the CMAKE_INSTALL_PREFIX to your LibPack folder (overwrite the existing files)

== References == <!--T:115-->

<!--T:74-->
See also
* [[Compiling_(Speeding_up)|Compiling - Speeding up]]


<!--T:69-->
{{Docnav
|[[Licence|Licence]]
|[[Compile_on_Linux|Compile on Linux]]
}}


</translate>
</translate>
{{Userdocnavi{{#translation:}}}}
{{clear}}
[[Category:Developer_Documentation{{#translation:}}]]
[[Category:Developer{{#translation:}}]]

Latest revision as of 19:20, 28 March 2023

This page explains step by step how to compile FreeCAD 0.19 or newer on Windows using Microsoft's MSVC compiler. For information on using MSYS2/MinGW see Compile on MinGW. For other platforms see Compiling.

Prerequisites

Compiling FreeCAD on Windows requires several tools and libraries.

Required

  • A compiler. FreeCAD is tested with Visual Studio (MSVC)—other compilers may work, but instructions for use are not included here. Fore more details, see the section Compiler below.
  • Git (There are also GUI frontends available for Git, see the next section.)
  • CMake version 3.11.x or newer.
    Hint: Choosing the option Add CMake to the system PATH for all users when installing CMake will make CMake accessible from the Windows command prompt, which can be useful.
  • The LibPack. This is a single package containing all of the libraries necessary to compile FreeCAD on Windows. Download the version of the LibPack that corresponds to the version of FreeCAD you want to compile. To compile FreeCAD 0.20 download the LibPack version 2.6, for FreeCAD 0.19 download the LibPack version 1.0. Extract the LibPack to a convenient location. (If your computer does not recognize the .7z extension, you must install the program 7-zip.)
    Note: It is highly recommended to compile FreeCAD with the compiler version the LibPack is designed for. For example, you might run into problems compiling FreeCAD 0.20 using MSVC 2017 because the LibPack is designed to be built with MSVC 2019 or newer.
    To update your LibPack later, see the section Updating the LibPack.

Optional programs

  • A GUI frontend for Git. There are several frontends available, see this list. The main benefit of a frontend is that you don't have to learn the Git commands to get the source code of FreeCAD or to send patches to the GitHub repository of FreeCAD.

In the following we describe source code handling using the TortoiseGit frontend. This frontend integrates directly into Windows file explorer and has a large user community to get help in case you have problems.

  • NSIS is used to generate the FreeCAD Windows installer.

Source code

Now you can get the source code of FreeCAD:

Using a frontend

When using the Git frontend TortoiseGit:

  1. Create a new folder where the source code will be downloaded.
  2. Right-click on this folder in the Windows file explorer and select Git Clone in the context menu.
  3. A dialog will appear. In it, enter the URL for the FreeCAD Git repository

https://github.com/FreeCAD/FreeCAD.git

and click OK.

The latest source code will be downloaded from the FreeCAD Git repository and the folder will be tracked by Git.

Using the command line

To create a local tracking branch and download the source code, open a terminal (command prompt) and switch there to the directory you want the source, then type:

git clone https://github.com/FreeCAD/FreeCAD.git

Compiler

The default (recommended) compiler is MS Visual Studio (MSVC). Though it may be possible to use other compilers, for example gcc via Cygwin or MinGW, it is not tested or covered here.

You can get a free version of MSVC (for individual usage) by downloading the Community edition of MS Visual Studio.

For those who want to avoid installing the huge MSVC for the mere purpose of having a compiler, see CompileOnWindows - Reducing Disk Footprint.

Note: Although the Community edition of MSVC is free, to use the IDE for more than a 30-day trial period you must create a Microsoft account. If you will only compile using the command line, you don't need the IDE and thus no Microsoft account.

As a free and OpenSource alternative IDE you can use KDevelop. You can use KDevelop to modify and write C++ code but must use the command line to compile.

Optional system path configuration

Optionally you can include the paths to some folders to the system PATH variable. This is helpful if you want to access programs in these folders from the command line/powershell or if you want special programs to be found by the compiler or CMake. Besides this, adding folders to the PATH might be necessary if you did not use the corresponding options when installing the program.

  • You can include the folder of your LibPack in your system PATH variable. This is useful if you plan to build multiple configurations/versions of FreeCAD.
  • If you did not use the option to add CMake to the PATH while installing it, add its installation folder

C:\Program Files\CMake\bin to the PATH.

  • If you did not use the option to add TortoiseGit to the PATH while installing it, add its installation folder

C:\Program Files\TortoiseGit\bin to the PATH.

To add folder paths to the PATH variable:

  1. In the Windows Start menu Right click on Computer and choose Properties.
  2. In the appearing dialog click on Advanced system settings.
  3. Another dialog will open. Click there in the tab Advanced on Environment Variables.
  4. Again another dialog will open. Select then the variable Path and click on Edit.
  5. And again another dialog will open. Click there on New and add to path to the folder of Git or the LibPack.
  6. Finally press OK and close all dialogs by pressing OK as well.

Configuration

Once you have all of the necessary tools, libraries, and FreeCAD source code, you are ready to begin the configuration and compilation process. This process will proceed in five steps:

  1. Run CMake once to examine your system and begin the configuration progress (this will report that it failed).
  2. Adjust necessary CMake settings to set the locations of the LibPack and enable Qt5.
  3. Re-run CMake to finalize the configuration (this time it should succeed).
  4. Use CMake to generate the Visual Studio build system.
  5. Use Visual Studio to build FreeCAD.

CMake

First, configure the build environment using CMake:

  1. Open the CMake GUI
  2. Specify the source folder of FreeCAD.
  3. Specify a build folder. This can be build in the folder you cloned the repo because this path is ignored by git. Do not use the source folder. CMake will create this folder if it does not exist.
  4. Click Configure.
  5. In the dialog that appears specify the generator you want to use: in most cases you will use the defaults in this dialog. For the standard MS Visual Studio use Visual Studio xx 2yyy where xx is the compiler version and 2yyy the year of its release. It is recommended to use the default option Use default native compilers.

Note: It is important to specify the correct bit variant. If you have the 64-bit variant of the LibPack you must also use the x64 compiler.

This will begin the configuration and will fail because of missing settings. This is normal, you have not yet specified the location of the LibPack. However, there are other failures that might occur that require some further action on your part.

If it fails with the message that Visual Studio could not be found, the CMake support in MSVC is not yet installed. To do this:

  1. Open the MSVC IDE
  2. Use the menu Tools → Get Tools and Features
  3. In the Workloads tab enable Desktop development with C++
  4. On the right side you should now see that the component Visual C++ tools for CMake will be installed.
  5. Install it.

If it fails with a message about the wrong Python version or missing Python, then:

  1. Use the "Search:" box in CMake to search for the string "Python"
  2. If you see there a path like C:/Program Files/Python38/python.exe, CMake recognized the Python that is already installed on your PC, but that version is not compatible with the LibPack. Since the LibPack includes a compatible version of Python, modify the following Python settings in CMake to its paths (assuming the LibPack is in the folder D:/FreeCAD-build/FreeCADLibs_2_8_x64_VC2019):

If there is no error about Visual Studio or Python, everything is fine, but CMake does not yet know all necessary settings. Therefore now:

  1. Search in CMake for the variable FREECAD_LIBPACK_DIR and specify the location of the LibPack folder you downloaded earlier.
  2. (If building FreeCAD 0.19) Search for the variable BUILD_QT5 and enable this option.
  3. (If planning on running directly from the build folder such as for debugging) Search for and enable the following options:
    • FREECAD_COPY_DEPEND_DIRS_TO_BUILD
    • FREECAD_COPY_LIBPACK_BIN_TO_BUILD
    • FREECAD_COPY_PLUGINS_BIN_TO_BUILD
  4. Click Configure again.

There should now be no errors. If you continue to encounter errors that you cannot diagnose, visit the Install/Compile forum on the FreeCAD forum website. If CMake proceeded correctly, click on Generate. After this is done you can close CMake and start the compilation of FreeCAD using Visual Studio. However, for the first compilation keep it open in case you want or need to change some options for the build process.

Options for the build process

The CMake build system gives you control over some aspects of the build process. In particular, you can switch on and off some features or modules using CMake variables.

Here is a description of some of these variables:

Variable name Description Default
BUILD_XXX Build FreeCAD with the component XXX. If you don't want/need to compile e.g. the workbench OpenSCAD, disable the variable BUILD_OPENSCAD. FreeCAD will then not have this workbench.

Note: Some components are required for other components. If you for example uncheck BUILD_ROBOT CMake will inform you that then the component Path cannot be compiled correctly. Therefore check the CMake output after you changed a BUILD_XXX option!

depends
BUILD_ENABLE_CXX_STD The version of the C++ language standard. C++14 is the highest possible for FreeCAD 0.19 while at least C++17 is required for FreeCAD 0.20. See also the note in the section Building with Visual Studio 15 (2017) and 16 (2019) depends
BUILD_DESIGNER_PLUGIN To build the Qt Designer plugin, see this section below OFF
BUILD_FLAT_MESH Necessary to have a build that includes the CreateFlatMesh feature OFF
CMAKE_INSTALL_PREFIX The output folder when building the target INSTALL, see also the section Running and installing FreeCAD Windows default program installation folder
FREECAD_COPY_DEPEND_DIRS_TO_BUILD Copies depending libraries needed to execute the FreeCAD.exe to the build folder. See also the section Running and installing FreeCAD.
Note: the options FREECAD_COPY_XXX only appear if the libraries were not already copied. If you only need to upgrade/change to another LibPack version, see the section Updating the LibPack. If you want to bring back the options for some reason, you need to delete all folders in your build folder, except for the LibPack folder. In CMake delete the cache and start as if you compile for the first time.
OFF
FREECAD_COPY_LIBPACK_BIN_TO_BUILD Copies the LibPack binaries needed to execute the FreeCAD.exe to the build folder. See also the section Running and installing FreeCAD. OFF
FREECAD_COPY_PLUGINS_BIN_TO_BUILD Copies Qt's plugin files needed to execute the FreeCAD.exe to the build folder. See also the section Running and installing FreeCAD. OFF
FREECAD_LIBPACK_USE Switch the usage of the FreeCAD LibPack on or off ON
FREECAD_LIBPACK_DIR Directory where the LibPack is FreeCAD's source code folder
FREECAD_RELEASE_PDB Create debug libraries (*.pdb) also for release builds. It doesn't affect the speed (like a real debug build would do) and can be very useful to locate crashes in FreeCAD code. In case FreeCAD crashes a crash.dmp file will be created that can be loaded with MSVC and if you have the corresponding PDB files plus the source code of that version you can debug through the code. Without the PDB files it's not possible to debug the code and all what the debugger shows is the name of the DLL where the crash has occurred. ON
FREECAD_USE_MP_COMPILE_FLAG Adds the /MP (multiprocessor) option to the Visual Studio projects, enabling speedups on multi-core CPUs. This can greatly accelerate builds on modern processors.
Note: If you turn off FREECAD_USE_PCH, the compilation can quickly overload your heap space, even if you have 16 GB RAM.
ON
FREECAD_USE_PCH Precompiles the headers in order to save compilation time. ON
FREECAD_USE_PYBIND11 Includes the PyBind11 library. Necessary to have a build that includes the CreateFlatMesh feature.
Note: after turning it on you might get a configuration error. Just configure again and the problem should go away.
OFF

Building FreeCAD

Depending on your compiler, the process for building FreeCAD will be slightly different. In the following sections known workflows are described. If you are building with Qt Creator, jump to Building with Qt Creator (outdated), otherwise proceed directly:

Building with Visual Studio 15 (2017) or newer

Release Build

  1. Start the Visual Studio IDE. This can either be done by pressing the button Open Project in the CMake GUI or by double-clicking on the file FreeCAD.sln that you find in your build folder.
  2. In the toolbar of the MSVC IDE assure that you use for the first compilation Release.
  3. There is a window called Solution Explorer. It lists all possible compilation targets. To start a full compilation, right-click on the target ALL_BUILD and then choose Build.

This will now take quite a long time.

To compile a ready-to use FreeCAD, compile the target INSTALL, see the section Running and installing FreeCAD.

If you don't get any errors you are done. Congratulations! You can exit MSVC or keep it open.

Important: Since Visual Studio 17.4 you cannot use the code optimization that is on by default for the target SketcherGui. If you do, angle constraints will be misplaced in sketches. To fix this, right-click on this target in the MSVC solution explorer and select the last entry Properties in the context menu. In the appearing dialog go to C/C++ → Optimization and there disable the setting Optimization. Finally build the target ALL_BUILD again.

Debug Build

For a debug build it is necessary that the Python is used that is included in the LibPack. To assure this:

  1. Search in the CMake GUI for "Python"
  2. If you see there a path like C:/Program Files/Python38/python.exe, CMake recognized the Python that is installed on your PC and not the one of the LibPack. In this case adapt these different Python settings in CMake to this (assuming the LibPack is in the folder D:\FreeCAD-build\FreeCADLibs_12.5.2_x64_VC17):

As prerequisite for the debug build, you need to do this:

  1. Copy the content of the LibPack folder bind to the bin folder of the FreeCAD build folder (overwrite the existing files).
  2. Copy the content of the LibPack folder libd to the lib folder of the FreeCAD build folder.

Now you can compile:

  1. Start the Visual Studio IDE. This can either be done by pressing the button Open Project in the CMake GUI or by double-clicking on the file FreeCAD.sln that you find in your build folder.
  2. In the toolbar of the MSVC IDE assure that you use for the first compilation Debug.
  3. There is a window called Solution Explorer. It lists all possible compilation targets. To start a full compilation, right-click on the target ALL_BUILD and then choose Build in the context menu.

This will now take quite a long time.

If there were no compilation errors, and if the FREECAD_COPY_* options mentioned in the CMake Configuration step above were enabled, you can start the debug build:

  1. Right-click on the target FreeCADMain and then choose Set as Startup Project in the context menu.
  2. Finally click in the toolbar on the button with the green triangle named Local Windows Debugger.

This will start the debug build of FreeCAD and you can use the MSVC IDE to debug it.

Video Resource

An English language tutorial that begins with configuration in CMake Gui and continues to the `Build` command in Visual Studio 16 2019 is available unlisted on YouTube at Tutorial: Build FreeCAD from source on Windows 10.

Building with Qt Creator (outdated)

Installation and configuration of Qt Creator

  • Download and install Qt Creator
  • Tools → Options → Text Editor → Behavior tab:
    • File Encodings → Default Encodings:
    • Set to: ISO-8859-1 /...csISOLatin1 (Certain characters create errors/warnings with Qt Creator if left set to UTF-8. This seems to fix it.)
  • Tools → Options → Build & Run:
    • CMake tab
      • Fill Executable box with path to cmake.exe
    • Kits tab
      • Name: MSVC 2008
      • Compiler: Microsoft Visual C++ Compiler 9.0 (x86)
      • Debugger: Auto detected...
      • Qt version: None
    • General tab
      • Uncheck: Always build project before deploying it
      • Uncheck: Always deploy project before running it

Import project and building

  • File → Open File or Project
  • Open CMakeLists.txt which is in the top level of the source
  • This will start CMake
  • Choose build directory and click next
  • Set generator to NMake Generator (MSVC 2008)
  • Click Run CMake. Follow the instructions depicted above to configure CMake to your liking.

Now FreeCAD can be built

  • Build → Build All
  • This will take a long time...

Once complete, it can be run: There are 2 green triangles at the bottom left. One is debug. The other is run. Pick whichever you want.

Command line build

The steps how to compile from the command line depends on the compiler. For MSVC 2017 the steps are:

  1. In Windows start menu go to Visual Studio 2017 → Visual Studio Tools and choose Developer Command Prompt for VS 2017
  2. Change to your build folder.
  3. Execute the command
msbuild ALL_BUILD.vcxproj /p:Configuration=Release

or

msbuild INSTALL.vcxproj /p:Configuration=Release

These steps can also be automaized. Here is for example a solution for MSVC 2017:

  1. Download the script compile-FC.txt.
  2. Rename it to compile-FC.bat
  3. In Windows file explorer Shift+Right-click on your build folder and use from the context menu Command prompt here.
  4. Execute the command
compile-FC install

Instead of calling compile-FC with the option install you can also use debug or release:

debug   - compile FreeCAD in debug configuration

release - compile FreeCAD in release configuration

install    - compile FreeCAD in release configuration and create an install setup

Running and installing FreeCAD

There are 2 methods to run the compiled FreeCAD:

Method 1: You execute the FreeCAD.exe that you find in your build folder in the subfolder bin

Method 2: You build the target INSTALL

Method 2 is the simpler one because it automatically assures that all libraries needed to run the FreeCAD.exe are in the correct folder. The FreeCAD.exe and the libraries will be output in the folder you specified in the CMake variable CMAKE_INSTALL_PREFIX.

For Method 1 you need to enable the FREECAD_COPY_* options mentioned in the CMake Configuration step above.

Troubleshooting

When running FreeCAD you may encounter missing DLLs when using certain workbenches or features of workbenches. The error message in FreeCAD's console will not tell you what DLL is missing. To find this out you must use an external tool:

import os
os.system(r"~\DependenciesGui.exe")

Note: Instead of the ~ you must specify the full path to the DependenciesGui.exe on your system.

  • Now drag in the *.pyd file of the workbench with which you get missing DLLs reported.

Updating the build

FreeCAD is very actively developed. Therefore its source code changes almost daily. New features are added and bugs are fixed. To benefit from these source code changes, you must rebuild your FreeCAD. This is done in two steps:

  1. Updating the source code
  2. Recompilation

Updating the source code

Using a frontend

When using the Git frontend TortoiseGit:

  1. Right-click on your FreeCAD source code folder in the Windows file explorer and select Pull in the context menu.
  2. A dialog will appear. Select there what development branch you want to get. master is the main branch. Therefore use this unless you want to compile a special new feature from a branch that has not yet been merged to master. (For more about Git branches, see Git development process.)

Finally click OK.

Using the command line

Open a terminal (command prompt) and switch there to your source directory. Then type:

git pull https://github.com/FreeCAD/FreeCAD.git master

where master the the name of the main development branch. If you want to get code from another branch, use its name instead of master.

Recompilation

  1. Open the MSVC IDE by double-clicking either on the file FreeCAD.sln or on the file ALL_BUILD.vcxproj in your build folder.
  2. Continue with step 2 from the section Building with Visual Studio 15 2017.

Updating the LibPack

If a new major version of a third-party dependency like Open Cascade is released, or if a third-party dependency has important bug fixes, a new LibPack is released. You can find the latest version here.

To update your LibPack the following recipe is best practice:

  1. Delete the bin folder in your build folder.
  2. Switch to your local LibPack folder and delete everything there.
  3. Extract the content of the new LibPack ZIP file into the existing, but now empty, local LibPack folder.
  4. Open CMake and there press the button Configure and then the button Generate. This recreates the bin folder you just deleted and also copies the new LibPack files into it.
  5. In CMake click the button Open Project and the MSVC IDE will open.
  6. In the MSVC IDE build the target INSTALL.

Tools

In order to join the FreeCAD development you should compile and install the following tools:

Qt Designer plugin

FreeCAD uses Qt as toolkit for its user interface. All dialogs are setup in UI-files that can be edited using the program Qt Designer that is part of any Qt installation and also included in the LibPack. FreeCAD has its own set of Qt widgets to provide special features like adding a unit to input fields and to set preferences properties.

Compilation

The plugin cannot be loaded by the Qt Designer if it was compiled using another Qt version than the one your Qt Designer/Qt Creator is based on. Therefore the plugin must be compiled together with FreeCAD:

  • In the CMake options (see this section above) enable the option BUILD_DESIGNER_PLUGIN and reconfigure.
  • open MSVC and build the target FreeCAD_widgets

As result you will get the plugin file 'FreeCAD_widgets.dll in the folder
~\src\Tools\plugins\widget\Release

Installation

To install the plugin, copy the DLL either to:

  • If you use the LibPack: to the folder
    ~\FreeCADLibs_2_8_x64_VC2019\plugins\designer
  • If you have a full Qt installation: you can choose between the folder
    C:\Qt\5.15.2\msvc2019_64\plugins\designer
    or
    C:\Qt\5.15.2\msvc2019_64\bin\designer (you must first create the designer subfolder.)
    (adapt the paths to your installation!).

Finally (re)start Qt Designer and check its menu Help → Plugins. If the plugin FreeCAD_widgets.dll is listed as being loaded, you can now design and change FreeCAD's .ui files. If not, you must compile the DLL by yourself.

If you prefer using Qt Creator instead of Qt Designer, the plugin file must be placed in this folder:
C:\Qt\Qt5.15.2\Tools\QtCreator\bin\plugins\designer
Then (re)start Qt Creator, switch to the mode Design and then check the menu Tools → Form Editor → About Qt Designer Plugins. If the plugin FreeCAD_widgets.dll is listed as being loaded, you can now design and change FreeCAD's .ui files. If not, you must compile the DLL by yourself.

Thumbnail Provider

FreeCAD has the feature to provide preview thumbnails for *.FCStd files. That means that in the Windows file explorer *.FCStd files are shown with a screenshot of the model it contains. To provide this feature, FreeCAD needs to have the file FCStdThumbnail.dll installed to Windows.

Installation

The DLL is installed this way:

  1. Download this ZIP file and extract it.
  2. Open a Windows command prompt with administrator privileges (these privileges are a requirement).
  3. Change to the folder where the DLL is.
  4. Execute this command
    regsvr32 FCStdThumbnail.dll
    

So check if it works, assure that in FreeCAD the preferences option Save thumbnail into project file when saving document is enabled and save a model. Then view in Windows Explorer the folder of the saved model using a symbol view. You should now see a screenshot of the model in the folder view.

Compilation

To compile the FCStdThumbnail.dll

  1. Change to the FreeCAD source folder
    ~\src\Tools\thumbs\ThumbnailProvider
  2. Open the CMake GUI
  3. Specify there as source folder the one you are currently in.
  4. Use the same folder as build folder.
  5. Click Configure
  6. In the appearing dialog, specify the generator according to the one you want to use. For the standard MS Visual Studio use Visual Studio xx 2yyy where xx is the compiler version and 2yyy the year of its release. It is recommended to use the default option Use default native compilers.
    Note: It is important to specify the correct bit variant. If you have the 64bit variant of LibPack you must also use the x64 compiler.
  7. Click on Generate.
  8. You should now have the file ALL_BUILD.vcxproj in the folder ~\src\Tools\thumbs\ThumbnailProvider. Double-click on it and the MSVC IDE will open.
  9. In the toolbar of the MSVC IDE assure that you use the compilation target Release.
  10. There is a window called Solution Explorer. Right-click there on ALL_BUILD and then choose Build.
  11. As result you should now have a FCStdThumbnail.dll in the folder ~\src\Tools\thumbs\ThumbnailProvider\release that you can install as described above.

Compiling Open Cascade

The LibPack comes with a version of Open Cascade that is suitable for general use. However, under some circumstances you may wish to compile against an alternate version of Open Cascade, such as one of their official releases, or a patched fork.

When compiling Open Cascade for FreeCAD note that there is no guarantee that FreeCAD will work with all versions of Open Cascade. Note also that when you are using the Netgen library, you must use the a NetGen version that it approved to compile with the Open Cascade version you like to compile.

To compile:

  • Then open the CMake GUI to configure the build system in a similar manner to building FreeCAD. These CMake options have to be set (or explicitly not set):
Variable name Description Default
3RDPARTY_DIR The path to 3rdparty components. It is recommended to use the folder as input where your used LibPack is. Explicitly leave this field empty. empty
3RDPARTY_DOXYGEN_EXECUTABLE The path to the executable of the 3rdparty component Doxygen. It is recommended to install Doxygen. CMake will then find it automatically. empty
3RDPARTY_FREETYPE_DIR The path to the necessary 3rdparty component Freetype. It is recommended to use the folder as input where your used LibPack is. empty
3RDPARTY_RAPIDJSON_DIR Only available if USE_RAPIDJSON is used. The path to the 3rdparty component RapidJSON. It is recommended NOT to use an existing LibPack folder as input. You can use the RapidJSOn folder from a LibPack, but copy it to a new folder and use this new folder as input. empty
3RDPARTY_TCL_DIR The path to the necessary 3rdparty component TCL. It is recommended NOT to use an existing LibPack folder as input. Take for example one of these releases, extract it and take this as input folder for CMake. empty
3RDPARTY_TK_DIR The path to the necessary 3rdparty component TK. It is recommended NOT to use an existing LibPack folder as input. Take for example one of these releases, extract it and take this as input folder for CMake. empty
3RDPARTY_VTK_DIR Only available if USE_VTK is used. The path to the necessary 3rdparty component VTK. It is recommended to use the folder as input where your used LibPack is. If you use another folder please assure that you don't use VTK 9.x or newer. empty
BUILD_RELEASE_DISABLE_EXCEPTIONS Disables exception handling for release builds. For FreeCAD you must set it to OFF. ON
INSTALL_DIR The output folder when building the target INSTALL. If the build was successful, take the files from this folder to update your LibPack. Windows default program installation folder
INSTALL_DIR_BIN The output subfolder for the DLL when building the target INSTALL. You must change it to bin win64/vc14/bin
INSTALL_DIR_LIB The output subfolder for the .lib files when building the target INSTALL. You must change it to lib win64/vc14/lib
USE_RAPIDJSON To compile Open Cascade with support for RapidJSON. Enabling this is mandatory in order to get support for the file format glTF. OFF
USE_VTK To compile Open Cascade with support for VTK. Enabling this is optimal. You can use this to build Open Cascade's VTK bridge. OFF
  • Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the Release mode.
  • Repeat building the two targets in the Debug mode.

To build FreeCAD using the self-compiled Open Cascade, you must do the following:

  • Copy all folders from the INSTALL_DIR to your LibPack folder (overwrite the existing files)
  • Switch to the LibPack folder and go there to the subfolder cmake
  • Open there the file OpenCASCADEDrawTargets.cmake with a text editor
  • Search there for absolute paths to your LibPack folder and remove them. So e.g. the absolute path
    D:/FreeCADLibs_12.5.4_x64_VC17/lib/freetype.lib
    becomes just
    freetype.lib
  • Do the same for the file OpenCASCADEVisualizationTargets.cmake

Compiling Netgen

The LibPack comes with a version of Netgen that will was tested to be build with the Open Cascade version of the LibPack. The problem is that every new release of Netgen changes the API. Also every new release of Open Cascade does the same. Therefore one cannot just easily change the Netgen version.

However, you might build Netgen nevertheless. This is an easy task:

  • First obtain the Netgen source code, either directly from Netgen 's git repository.
  • Then open the CMake GUI to configure the build system in a similar manner to building FreeCAD. These CMake options have to be set:
Variable name Description Default
CMAKE_INSTALL_PREFIX The output folder when building the target INSTALL. If the build was successful, take the files from this folder to update your LibPack. C:/netgen
OpenCasCade_DIR The path to the CMake files of Open Cascade. If you built Open Cascade as described in the section Compiling Open Cascade you can use the subfolder cmake of there folder you used as INSTALL_DIR. If not, use the subfolder cmake of your LibPack. Note hereby that the LibPack must then already contain a proper Open Cascade build. Independent what folder you use, you must now also create there a subfolder lib and copy in the files freetype.lib and freetyped.lib from your LibPack. empty
USE_GUI set it to OFF ON
USE_NATIVE_ARCH set it to OFF; this is only necessary important to support older CPU that don't have the AVX2 instruction set ON
USE_OCC set it to ON OFF
USE_PYTHON set it to OFF ON
USE_SUPERBUILD set it to OFF ON
ZLIB_INCLUDE_DIR The path to the necessary 3rdparty component zlib. It is recommended to use the folder as input where your used LibPack is. empty
ZLIB_LIBRARY_DEBUG The path to the ZLib file zlibd.lib. It is located in the subfolder lib of your LibPack folder. empty
ZLIB_LIBRARY_RELEASE The path to the ZLib file zlib.lib. It is located in the subfolder lib of your LibPack folder. empty
  • Additionally you need to add a new CMake entry:

name: CMAKE_DEBUG_POSTFIX, type: string, content: _d
This assures that he file names of the debug libraries get another name than the release libraries and can later not be accidentally exchanged.

  • Press the Configure button in CMake to generate the *.cmake files.
  • Only necessary if older CPU should be supported that don't have the AVX2 instruction set:
    • Search your Netgen build folder for the file netgen-targets.cmake and open it with a text editor. Remove the setting ;/arch:AVX2 in the Option INTERFACE_COMPILE_OPTIONS.
    • Press the Configure button in CMake again.
  • Press the Generate button in CMake.
  • Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the Release mode.
  • Repeat building the two targets in the Debug mode.

To build FreeCAD using the self-compiled Netgen, you must do the following:

  • Copy all folders from the CMAKE_INSTALL_PREFIX to your LibPack folder (overwrite the existing files)

References

See also