Compile on Windows/it

This article explains step by step how to compile FreeCAD on Windows.

Prerequisiti
NOTE:- The new LibPack (FreeCADLibs_10.0_x64_VC11.7z) requires Visual Studio 2012.

NOTE:- Currently FreeCAD supports both Cmake version 2.x.x and Cmake 3.x.x

What you need is mainly the compiler. On Windows we use the M$ Visual Studio 9 Compiler 2008 (or VC++ Express 2008) with the highest service pack. Although it's probably possible to use Cygwin or MinGW gcc it's not tested or ported so far. You need to download the Windows Platform SDK to get e.g. the Windows.h, although this should not be needed with M$ compilers (either full or express).

Also you need all the Third Party Libraries to successfully compile FreeCAD. If you use the M$ compilers you want most likely to download the FreeCAD LibPack which provides you with all needed libs to build FreeCAD on Windows.

Other prerequisites (and helpful programs) are:
 * CMake version 2.x.x or cmake 3.x.x
 * TortoiseGit
 * Python 2.6
 * NSIS Windows installer (note: formerly, WiX installer was used - now under transition to NSIS) - if you want to make msi installer

It is also necessary to have, in your system path, paths to:
 * Libpack
 * git (not tortoiseGit, but git.exe)
 * python

Building with CMake
First of all, you have to download CMake and install it on your build machine.

NOTE:- Currently you must use Cmake version 2.x.x, Cmake 3.x.x is not supported.

The switch to CMake
Since version 0.9 we use the CMake build system to generate the build/make files for various compilers. We do not longer deliver .vcproj files. If you want build former versions of FreeCAD (0.8 and older) see Building older versions later in this article.

We switched because it became more and more painful to maintain project files for 30+ build targets and x compilers. CMake gives us the possibility to support alternative IDEs, like Code::Blocks, Qt Creator and Eclipse CDT. The main compiler we use is still M$ VC9 Express, though. But we plan for the future a build process on Windows without proprietary compiler software.

CMake dependencies
The first step to build FreeCAD with CMake is to configure the environment. There are basically two ways to go:
 * Using the LibPack
 * Installing all needed libs and let CMake find them

We will be using LibPack here. The second option may be discussed in Options for the Build Process.

Add libpack to the system path:
 * Start menu -> Right click on Computer -> Properties -> Advanced system settings
 * Advanced tab -> Environment Variables...
 * Add the libpack folder location to the PATH
 * It should be separated from the others with a semicolon `;`

If you are building with Qt Creator, jump to Building with Qt Creator, otherwise proceed to Building with Visual Studio 9 2008.

Configure CMake using GUI

 * Open CMake GUI
 * Specify source folder
 * Specify build folder
 * Click Configure
 * Specify the generator as Visual Studio 9 2008

This will begin configuration and should fail because the location of FREECAD_LIBPACK_DIR is unset.
 * Expand the FREECAD category and set FREECAD_LIBPACK_DIR to the correct location
 * Click Configure again
 * There should be no errors
 * Click Generate
 * Close CMake
 * Copy libpack\bin folder into the new build folder CMake created

Building

 * Open Visual Studio 9 2008 or Visual C++ Express 2008
 * File -> Open -> Project/Solution
 * Open FreeCAD_Trunk.sln from the build folder CMake created
 * Switch the Solutions Configuration dropdown at the top to Release
 * Build -> Build Solution to build
 * This will take a long time...

After it is built:
 * Debug -> Start without Debugging
 * Click popup menu under Executable File Name and choose Browse
 * Go to the build\bin folder and choose FreeCAD.exe
 * You are done!

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
 * 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 Build

 * 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

CMake will error because it doesn't know where libpack is
 * Browse to the new build directory and open CMakeCache.txt
 * Find: FREECAD_LIBPACK_DIR:PATH=
 * Set the right side to libpack's location
 * Save and Close the file
 * Return to CMake and click Run CMake
 * This will configure and generate before completing
 * Click Finish
 * Copy libpack\bin folder into the new build folder CMake created

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.

Options for the Build Process
The CMake build system gives us a lot more flexibility over the build process. That means we can switch on and off some features or modules. It's in a way like the Linux kernel build. You have a lot switches to determine the build process.

Here is the description of these switches. They will most likely change a lot in the future because we want to increase the build flexibility a lot more.

Command line build
Here an example how to build FreeCAD from the Command line:

Using LibPack
To make it easier to get FreeCAD compiled, we provide a collection of all needed libraries. It's called the LibPack. You can find it on the download page on sourceforge.

You need to set the following environment variables:


 * FREECADLIB = "D:\Wherever\LIBPACK"


 * QTDIR = "%FREECADLIB%"

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.

Directory setup in Visual Studio
Some search path of Visual Studio need to be set. To change them, use the menu ''Tools→Options→Directory

Includes
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

Libs
Add the following search path to the lib path search list:
 * %FREECADLIB%\lib

Executables
Add the following search path to the executable path search list:
 * %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
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
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
After you conform to all prerequisites the compilation is - hopefully - only a mouse click in VC

After Compiling
To get FreeCAD up and running from the compiler environment you need to copy a few files from the LibPack to the bin folder where FreeCAD.exe is installed after a successful build:


 * 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

When using a LibPack with a Python version older than 2.5 you have to copy two further files:
 * 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.

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.

Additional stuff
If you whant to build the source code documentation you need DoxyGen.

To create an intstaller package you need WIX.

During the compilation some Python scripts get executed. So the Python interpreter has to work properly.

For more details have also a look to README.Linux in your sources.

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 //src/Tools/plugins/widget//. So far we don't provide a makefile -- but calling qmake plugin.pro creates it. Once that's done, calling make will create the library //libFreeCAD_widgets.so//. To make this library known to your Qt Designer you have to copy the file to //$QTDIR/plugin/designer//.