Compile on Linux/ru: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
(23 intermediate revisions by the same user not shown)
Line 10: Line 10:
{{TOCright}}
{{TOCright}}


<span id="Overview"></span>
== Обзор ==
== Обзор ==


Line 23: Line 24:
{{Caption|Общий рабочий процесс для компиляции FreeCAD из исходников. В систем должны быть как сторонние зависимости, так и исходные коды самого FreeCAD. CMake конфигурирует систему так чтобы весь проект скомпилировался одной инструкцией make.}}
{{Caption|Общий рабочий процесс для компиляции FreeCAD из исходников. В систем должны быть как сторонние зависимости, так и исходные коды самого FreeCAD. CMake конфигурирует систему так чтобы весь проект скомпилировался одной инструкцией make.}}


<span id="Getting_the_source"></span>
== Получение исходных кодов ==
== Получение исходных кодов ==


Line 38: Line 40:


{{Code|lang=bash|code=
{{Code|lang=bash|code=
git clone https://github.com/FreeCAD/FreeCAD.git freecad-source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source
}}
}}


Дополнительная информация о применении Git и внесении кода в проект изложена на странице [[Source code management/ru|управление исходным кодом]].
Дополнительная информация о применении Git и внесении кода в проект изложена на странице [[Source code management/ru|управление исходным кодом]].


<span id="Source_archive"></span>
=== Архив с исходным кодом ===
=== Архив с исходным кодом ===


Кроме того, вы можете загрузить исходники непосредственно с [https://github.com/FreeCAD/FreeCAD/releases/latest GitHub], в качестве {{incode|.zip}} или {{incode|.tar.gz}} архива, и распаковать его в заданный каталог.
Кроме того, вы можете загрузить исходники непосредственно с [https://github.com/FreeCAD/FreeCAD/releases/latest GitHub], в качестве {{incode|.zip}} или {{incode|.tar.gz}} архива, и распаковать его в заданный каталог.


<span id="Getting_the_dependencies"></span>
== Установка зависимостей (Dependencies) ==
== Установка зависимостей (Dependencies) ==


Line 57: Line 61:
<div class="mw-collapsible mw-collapsed toccolours">
<div class="mw-collapsible mw-collapsed toccolours">


<span id="Debian_and_Ubuntu"></span>
=== Debian и Ubuntu ===
=== Debian и Ubuntu ===


Line 112: Line 117:
*{{incode|libx11-dev}}
*{{incode|libx11-dev}}
*{{incode|libxerces-c-dev}}
*{{incode|libxerces-c-dev}}
*{{incode|libyaml-cpp-dev}}
*{{incode|libzipios++-dev}}
*{{incode|libzipios++-dev}}


<div class="mw-collapsible mw-collapsed" style="background-color:#e0e0e0">
<div class="mw-collapsible mw-collapsed" style="background-color:#e0e0e0">


<span id="Python_2_and_Qt4"></span>
==== Python 2 и Qt4 ====
==== Python 2 и Qt4 ====


Line 140: Line 147:
</div>
</div>


<span id="Python_3_and_Qt5"></span>
==== Python 3 и Qt5 ====
==== Python 3 и Qt5 ====


Line 149: Line 157:
*{{incode|libqt5opengl5-dev}}
*{{incode|libqt5opengl5-dev}}
*{{incode|libqt5svg5-dev}}
*{{incode|libqt5svg5-dev}}
*{{incode|libqt5webkit5-dev}} or {{incode|qtwebengine5-dev}}
*{{incode|qtwebengine5-dev}}
*{{incode|libqt5xmlpatterns5-dev}}
*{{incode|libqt5xmlpatterns5-dev}}
*{{incode|libqt5x11extras5-dev}}
*{{incode|libqt5x11extras5-dev}}
Line 158: Line 166:
*{{incode|python3-dev}}
*{{incode|python3-dev}}
*{{incode|python3-matplotlib}}
*{{incode|python3-matplotlib}}
*{{incode|python3-packaging}}
*{{incode|python3-pivy}}
*{{incode|python3-pivy}}
*{{incode|python3-ply}}
*{{incode|python3-ply}}
Line 171: Line 180:
*{{incode|python3-pyside2uic}}
*{{incode|python3-pyside2uic}}


<span id="OpenCascade_kernel"></span>
==== Ядро OpenCascade ====
==== Ядро OpenCascade ====


Line 203: Line 213:
}}
}}


<span id="Optional_packages"></span>
==== Необязательные к установке пакеты ====
==== Необязательные к установке пакеты ====


Line 213: Line 224:
</div>
</div>


<span id="Single_command_for_Python_3_and_Qt5"></span>
==== Устаовка Python 3 и Qt5 одной командой ====
==== Устаовка Python 3 и Qt5 одной командой ====


Требуется, чтобы Pyside2 был доступен в Debian buster и [[Installing_on_Linux#Official_Ubuntu_repository|freecad-stable/freecad-daily PPAs]].
Требуется, чтобы Pyside2 был доступен в Debian buster и [[Installing_on_Linux#Official_Ubuntu_repository|freecad-stable/freecad-daily PPAs]].


{{Code|code=
{{Code|lang=bash|code=
sudo apt install cmake cmake-gui libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside2-dev libqt5opengl5-dev libqt5svg5-dev libqt5webkit5-dev libqt5x11extras5-dev libqt5xmlpatterns5-dev libshiboken2-dev libspnav-dev libvtk7-dev libx11-dev libxerces-c-dev libzipios++-dev occt-draw pyside2-tools python3-dev python3-matplotlib python3-pivy python3-ply python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtsvg python3-pyside2.qtwidgets python3-pyside2.qtnetwork python3-pyside2.qtwebengine python3-pyside2.qtwebenginecore python3-pyside2.qtwebenginewidgets python3-pyside2.qtwebchannel python3-markdown python3-git python3-pyside2uic qtbase5-dev qttools5-dev swig
sudo apt install cmake cmake-gui libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside2-dev libqt5opengl5-dev libqt5svg5-dev qtwebengine5-dev libqt5x11extras5-dev libqt5xmlpatterns5-dev libshiboken2-dev libspnav-dev libvtk7-dev libx11-dev libxerces-c-dev libzipios++-dev occt-draw pyside2-tools python3-dev python3-matplotlib python3-packaging python3-pivy python3-ply python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtsvg python3-pyside2.qtwidgets python3-pyside2.qtnetwork python3-pyside2.qtwebengine python3-pyside2.qtwebenginecore python3-pyside2.qtwebenginewidgets python3-pyside2.qtwebchannel python3-markdown python3-git python3-pyside2uic qtbase5-dev qttools5-dev swig libyaml-cpp-dev
}}
}}


Line 225: Line 237:
<div class="mw-collapsible mw-collapsed" style="background-color:#e0e0e0">
<div class="mw-collapsible mw-collapsed" style="background-color:#e0e0e0">


<span id="Single_command_for_Python_2_and_Qt4"></span>
==== Установка Python 2 и Qt4 одной коммандой ====
==== Установка Python 2 и Qt4 одной коммандой ====


Line 231: Line 244:
<div class="mw-collapsible-content">
<div class="mw-collapsible-content">


{{Code|code=
{{Code|lang=bash|code=
sudo apt install cmake debhelper dh-exec dh-python libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin80-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libshiboken-dev libspnav-dev libvtk6-dev libx11-dev libxerces-c-dev libzipios++-dev lsb-release occt-draw pyside-tools python-dev python-matplotlib python-pivy python-ply swig
sudo apt install cmake debhelper dh-exec dh-python libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin80-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libshiboken-dev libspnav-dev libvtk6-dev libx11-dev libxerces-c-dev libzipios++-dev lsb-release occt-draw pyside-tools python-dev python-matplotlib python-pivy python-ply swig
}}
}}
Line 249: Line 262:
Выполните те же действия, что и в Debian и Ubuntu.
Выполните те же действия, что и в Debian и Ubuntu.


<div class="mw-translate-fuzzy">
Сообщалось о проблемах при попытке компиляции в Raspbian с Python 3 и Qt5, но комбинация Python 3 и Qt4, похоже, работает для более старых версий FreeCAD.
Сообщалось о проблемах при попытке компиляции в Raspbian с Python 3 и Qt5, но комбинация Python 3 и Qt4, похоже, работает для более старых версий FreeCAD.
</div>


<div class="mw-translate-fuzzy">
Для более новых версий FreeCAD компиляция с Py3/Qt5 проходит успешно, если установлена операционная система Ubuntu 20.04.
Для более новых версий FreeCAD компиляция с Py3/Qt5 проходит успешно, если установлена операционная система Ubuntu 20.04.
</div>


<div class="mw-translate-fuzzy">
Из-за различных проблем с Qt в этой версии обычные PySide tools не будут найдены.
Из-за различных проблем с Qt в этой версии обычные PySide tools не будут найдены.
</div>
{{Code|lang=bash|code=
{{Code|lang=bash|code=
E: Unable to locate package python3-pyside2uic
E: Unable to locate package python3-pyside2uic
Line 285: Line 304:


<div class="mw-collapsible-content">
<div class="mw-collapsible-content">
There is a bug in cmake distributed by Fedora 34/35 which results in cmake failing to find the opencascade libraries. This can easily be fixed by making one minor change to the top level cmake file of opencascade installed on Fedora. Details here:
https://bugzilla.redhat.com/show_bug.cgi?id=2083568.


Near the top of the file {{FileName|OpenCASCADEConfig.cmake}}, change the following line to use {{Incode|REAL_PATH()}}. This fixes a bug introduced by the use of a symlink from {{Incode|/lib}} to {{Incode|/usr/lib}} of Fedora, which causes cmake to fail.

This file is usually installed in {{FileName|/usr/lib64/cmake/opencascade/OpenCASCADEConfig.cmake}}.

{{Code|lang=bash|code=
get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
}}

change this to:

{{Code|lang=bash|code=
file (REAL_PATH ${OpenCASCADE_INSTALL_PREFIX} OpenCASCADE_INSTALL_PREFIX)
}}

This trivial change needs to be made inside the build directory once cmake has been run and failed. Re-running cmake will then correctly detect the OCCT libraries in the normal way.

==== Fedora38/39 ====

Now install Python 3.11. This includes a notable change in how Python initializes when running a program. As a result FreeCAD fails to find OpenCamLib, meaning [[CAM_Surface|3D Surface]] and [[CAM_Waterline|Waterline]] are not available in the [[CAM_Workbench|CAM Workbench]]. This was fixed in the master branch on 20th Mar 2024 ([https://github.com/FreeCAD/FreeCAD/pull/13059 Pull request #13059]).

<div class="mw-translate-fuzzy">
Вам нужны следующие пакеты :
Вам нужны следующие пакеты :
</div>


*{{Incode|gcc-c++}} (or possibly another C++ compiler?)
<!--<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">-->
*{{Incode|cmake}}
*gcc-c++ (or possibly another C++ compiler?)
*{{Incode|doxygen}}
*cmake
*{{Incode|swig}}
*doxygen
*{{Incode|gettext}}
*swig
*{{Incode|dos2unix}}
*gettext
*{{Incode|desktop-file-utils}}
*dos2unix
*{{Incode|libXmu-devel}}
*desktop-file-utils
*libXmu-devel
*{{Incode|freeimage-devel}}
*freeimage-devel
*{{Incode|mesa-libGLU-devel}}
*mesa-libGLU-devel
*{{Incode|opencascade-devel}}
*OCE-devel
*{{Incode|openmpi-devel}}
*{{Incode|python3}}
*python
*python-devel
*{{Incode|python3-devel}}
*{{Incode|python3-pyside2}}
*python-pyside-devel
*{{Incode|python3-pyside2-devel}}
*pyside-tools
*{{Incode|pyside2-tools}}
*boost-devel
*tbb-devel
*{{Incode|boost-devel}}
*eigen3-devel
*{{Incode|tbb-devel}}
*qt-devel
*{{Incode|eigen3-devel}}
*qt-webkit-devel
*{{Incode|qt-devel}}
*{{Incode|qt5-qtwebengine-devel}}
*qt5-qtxmlpatterns
*{{Incode|qt5-qtxmlpatterns}}
*qt5-qttools-static
*{{Incode|qt5-qtxmlpatterns-devel}}
*ode-devel
*{{Incode|qt5-qtsvg-devel}}
*xerces-c
*{{Incode|qt5-qttools-static}}
*xerces-c-devel
*opencv-devel
*{{Incode|ode-devel}}
*{{Incode|xerces-c}}
*smesh-devel
*{{Incode|xerces-c-devel}}
*Coin3
*Coin3-devel
*{{Incode|opencv-devel}}
*{{Incode|smesh-devel}}
*{{Incode|Coin3}}
*{{Incode|Coin3-devel}}
*{{Incode|yaml-cpp}}


(Не перепутайте "Coin" с "coin" - тот что с маленькой буквы это финансовый пакет. Апрельские Coin4 и Coin4-devel 2021 уже доступны)
(Не перепутайте "Coin" с "coin" - тот что с маленькой буквы это финансовый пакет. Апрельские Coin4 и Coin4-devel 2021 уже доступны)
(если coin2 является последней доступной версией для вашей версии Fedora, используйте пакеты из http://www.zultron.com/rpm-repo/)
(если coin2 является последней доступной версией для вашей версии Fedora, используйте пакеты из http://www.zultron.com/rpm-repo/)


*SoQt-devel
*{{Incode|SoQt-devel}}
*freetype
*{{Incode|freetype}}
*freetype-devel
*{{Incode|freetype-devel}}
*vtk
*{{Incode|vtk}}
*{{Incode|vtk-devel}}
*med
*med-devel
*{{Incode|med}}
*{{Incode|med-devel}}
<!--</div>-->


<div class="mw-translate-fuzzy">
Можете добавить, если требуется:
Можете добавить, если требуется:

</div>
<!--<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">-->


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 338: Line 385:
*pivy ( https://bugzilla.redhat.com/show_bug.cgi?id=458975 Pivy не обязателен, но нужен для верстака Draft)
*pivy ( https://bugzilla.redhat.com/show_bug.cgi?id=458975 Pivy не обязателен, но нужен для верстака Draft)
</div>
</div>

To install all dependencies at once (tested on fedora 36 and 37):

{{Code|lang=bash|code=
sudo dnf install gcc-c++ cmake doxygen swig gettext dos2unix desktop-file-utils libXmu-devel freeimage-devel mesa-libGLU-devel opencascade-devel openmpi-devel python3 python3-devel python3-pyside2 python3-pyside2-devel pyside2-tools boost-devel tbb-devel eigen3-devel qt-devel qt5-qtwebengine-devel qt5-qtxmlpatterns qt5-qtxmlpatterns-devel qt5-qtsvg-devel qt5-qttools-static ode-devel xerces-c xerces-c-devel opencv-devel smesh-devel Coin3 Coin3-devel SoQt-devel freetype freetype-devel vtk vtk-devel med med-devel libspnav-devel python3-pivy python3-markdown python3-GitPython yaml-cpp
}}


</div>
</div>
Line 372: Line 425:
zypper in --no-recommends -t pattern devel_C_C++ devel_qt5
zypper in --no-recommends -t pattern devel_C_C++ devel_qt5


zypper in libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel boost-devel swig libboost_program_options-devel libboost_mpi_python3-devel libboost_system-devel libboost_program_options-devel libboost_regex-devel libboost_python3-devel libboost_thread-devel libboost_system-devel libboost_headers-devel libboost_graph-devel python3 python3-devel python3-matplotlib python3-matplotlib-qt5 python3-pyside2 python3-pyside2-devel python3-pivy gcc gcc-fortran cmake occt-devel libXi-devel opencv-devel libxerces-c-devel Coin-devel SoQt-devel freetype2-devel eigen3-devel libode6 vtk-devel libmed-devel hdf5-openmpi-devel openmpi2-devel netgen-devel freeglut-devel libspnav-devel f2c doxygen dos2unix glew-devel
zypper in libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel boost-devel swig libboost_program_options-devel libboost_mpi_python3-devel libboost_system-devel libboost_program_options-devel libboost_regex-devel libboost_python3-devel libboost_thread-devel libboost_system-devel libboost_headers-devel libboost_graph-devel python3 python3-devel python3-matplotlib python3-matplotlib-qt5 python3-pyside2 python3-pyside2-devel python3-pivy gcc gcc-fortran cmake occt-devel libXi-devel opencv-devel libxerces-c-devel Coin-devel SoQt-devel freetype2-devel eigen3-devel libode6 vtk-devel libmed-devel hdf5-openmpi-devel openmpi2-devel netgen-devel freeglut-devel libspnav-devel f2c doxygen dos2unix glew-devel yaml-cpp
}}
}}


Line 399: Line 452:
Вам понадобятся следующие библиотеки из официальных архивов:
Вам понадобятся следующие библиотеки из официальных архивов:


*boost
*{{incode|boost}}
*{{incode|cmake}}
*curl
*{{incode|coin}}
*desktop-file-utils
*{{incode|curl}}
*glew
*{{incode|desktop-file-utils}}
*hicolor-icon-theme
*{{incode|eigen}}
*jsoncpp
*{{incode|gcc-fortran}}
*libspnav
*{{incode|git}}
*opencascade
*{{incode|glew}}
*shiboken2
*{{incode|hicolor-icon-theme}}
*xerces-c
*{{incode|jsoncpp}}
*pyside2
*{{incode|libspnav}}
*python-matplotlib
*{{incode|med}}
*python-netcdf4
*{{incode|nlohmann-json}}
*qt5-svg
*{{incode|opencascade}}
*qt5-webkit
*{{incode|pyside2-tools}}
*qt5-webengine
*{{incode|pyside2}}
*cmake
*{{incode|python-matplotlib}}
*eigen
*{{incode|python-netcdf4}}
*git
*{{incode|python-packaging}}
*gcc-fortran
*{{incode|python-pivy}}
*pyside2-tools
*{{incode|qt5-svg}}
*swig
*qt5-tools
*{{incode|qt5-tools}}
*{{incode|qt5-webengine}}
*shared-mime-info
*{{incode|shared-mime-info}}
*coin
*{{incode|shiboken2}}
*python-pivy
*{{incode|swig}}
*med
*{{incode|utf8cpp}}
*{{incode|verdict}}
*{{incode|xerces-c}}
*{{incode|yaml-cpp}}


{{Code|code=
{{Code|code=
sudo pacman -S boost curl desktop-file-utils glew hicolor-icon-theme jsoncpp libspnav opencascade shiboken2 xerces-c pyside2 python-matplotlib python-netcdf4 qt5-svg qt5-webkit qt5-webengine cmake eigen git gcc-fortran pyside2-tools swig qt5-tools shared-mime-info coin python-pivy med
sudo pacman -S --needed boost cmake coin curl desktop-file-utils eigen gcc-fortran git glew hicolor-icon-theme jsoncpp libspnav med nlohmann-json opencascade pyside2-tools pyside2 python-matplotlib python-netcdf4 python-packaging python-pivy qt5-svg qt5-tools qt5-webengine shared-mime-info shiboken2 swig utf8cpp xerces-c yaml-cpp
}}
}}

Note: Since version 5.0.1 of the {{incode|openmpi}} package the binary {{incode|libmpi_cxx.so}} stopped being shipped, this breaks the compilation with the current CMake process. To fix this you need to downgrade the package, see [https://forum.freecad.org/viewtopic.php?t=85207 this forum post].

<!--T:139-->
<!--T:139-->
</div>
</div>
Line 436: Line 496:
<div class="mw-collapsible mw-collapsed toccolours">
<div class="mw-collapsible mw-collapsed toccolours">


<span id="Older_and_non-conventional_distributions"></span>
=== Более старые и нетрадиционные дистрибутивы ===
=== Более старые и нетрадиционные дистрибутивы ===


Line 455: Line 516:
К ноябрю 2015 года устаревшая версия Pivy, включенная в исходный код FreeCAD, больше не будет компилироваться во многих системах. Это не большая проблема, так как обычно вы должны получить Pivy от менеджера пакетов вашего дистрибутива; если вы не можете найти Pivy, вам, возможно, придется скомпилировать его самостоятельно, см. Инструкции по компиляции Pivy.
К ноябрю 2015 года устаревшая версия Pivy, включенная в исходный код FreeCAD, больше не будет компилироваться во многих системах. Это не большая проблема, так как обычно вы должны получить Pivy от менеджера пакетов вашего дистрибутива; если вы не можете найти Pivy, вам, возможно, придется скомпилировать его самостоятельно, см. Инструкции по компиляции Pivy.


<span id="Debug_symbols"></span>
=== Отладочные символы ===
=== Отладочные символы ===


Line 461: Line 523:
Для Ubuntu вам, возможно, потребуется включить специальные репозитории, чтобы иметь возможность просматривать и устанавливать эти отладочные пакеты с помощью диспетчера пакетов. См.[https://wiki.ubuntu.com/Debug_Symbol_Packages Debug Symbol Packages] для получения дополнительной информации.
Для Ubuntu вам, возможно, потребуется включить специальные репозитории, чтобы иметь возможность просматривать и устанавливать эти отладочные пакеты с помощью диспетчера пакетов. См.[https://wiki.ubuntu.com/Debug_Symbol_Packages Debug Symbol Packages] для получения дополнительной информации.


<span id="Compile_FreeCAD"></span>
== Сборка FreeCAD ==
== Сборка FreeCAD ==


<div class="mw-translate-fuzzy">
{{VeryImportantMessage|Python 2 и Qt4 при сборке больше не поддерживается, а в версии 0.20 больше не поддерживается вообще. Допускается компиляция с Python 3 и Qt5. А для версии 0.20 требуется как минимум Python3.6 и Qt 5.9.}}
{{VeryImportantMessage|Python 2 и Qt4 при сборке больше не поддерживается, а в версии 0.20 больше не поддерживается вообще. Допускается компиляция с Python 3 и Qt5. А для версии 0.20 требуется как минимум Python3.6 и Qt 5.9.}}
</div>


FreeCAD использует CMake в качестве основной системы сборки, она доступна во всех основных операционных системах. Компиляция с помощью CMake обычно очень проста и происходит в два этапа.
FreeCAD использует CMake в качестве основной системы сборки, она доступна во всех основных операционных системах. Компиляция с помощью CMake обычно очень проста и происходит в два этапа.
Line 472: Line 537:
Поскольку FreeCAD - это крупное приложение, компиляция всего исходного кода может занять от 10 минут до одного часа, в зависимости от вашего процессора и количества ядер процессора, используемых для компиляции.
Поскольку FreeCAD - это крупное приложение, компиляция всего исходного кода может занять от 10 минут до одного часа, в зависимости от вашего процессора и количества ядер процессора, используемых для компиляции.


<span id="Building"></span>
Вы можете создать код либо в исходном каталоге, либо из него. Строительство вне источника, как правило, является лучшим вариантом.
<div class="mw-translate-fuzzy">

=== Сборка вне папки исходников ===
=== Сборка вне папки исходников ===
</div>


<div class="mw-translate-fuzzy">
Создание в отдельной папке удобнее, чем создание в том же каталоге, где находится исходный код, поскольку каждый раз, когда вы обновляете исходный код, CMake может разумно определить, какие файлы изменились, и перекомпилировались только то, что необходимо. Это очень полезно при тестировании различных ветвей Git, так как вы не путаете систему сборки.

Для сборки из исходного кода просто создайте каталог сборки {{incode|freecad-build}}, отличный от вашей исходной папки FreeCAD, {{incode|freecad-source}}; затем из этой точки каталога сборки {{incode|cmake}} в нужную исходную папку. Вы также можете использовать {{incode|cmake-gui}} или {{incode|ccmake}} вместо {{incode|cmake}} в приведенных ниже инструкциях. Как только {{incode|cmake}} завершит конфигурацию среды, используйте {{incode|make}} для запуска актуальной компиляции.
Для сборки из исходного кода просто создайте каталог сборки {{incode|freecad-build}}, отличный от вашей исходной папки FreeCAD, {{incode|freecad-source}}; затем из этой точки каталога сборки {{incode|cmake}} в нужную исходную папку. Вы также можете использовать {{incode|cmake-gui}} или {{incode|ccmake}} вместо {{incode|cmake}} в приведенных ниже инструкциях. Как только {{incode|cmake}} завершит конфигурацию среды, используйте {{incode|make}} для запуска актуальной компиляции.
</div>


{{Code|lang=bash|code=
{{Code|lang=bash|code=
mkdir freecad-build
# from your freecad source folder:
cd freecad-build
mkdir build
cd build
cmake ../freecad-source
cmake ../
make -j$(nproc --ignore=2)
make -j$(nproc --ignore=2)
}}
}}


<div class="mw-translate-fuzzy">
Примечание: если вы компилируете ветвь выпуска 0.19, вы должны конкретно указать, что вы компилируете с Qt5 и Python 3 -- замените команду CMake выше на:
{{Code|lang=bash|code=
cmake ../freecad-source -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3
}}

Опция {{incode|-j}} {{incode|make}} определяет, сколько задач (файлов) компилируется параллельно. Программа {{incode|nproc}} выводит количество ядер процессора в вашей системе; используя ее вместе с опцией {{incode|-j}}, вы можете обработать столько файлов, сколько у вас ядер, чтобы ускорить общую компиляцию программы. В приведенном выше примере он будет использовать все ядра вашей системы, кроме двух; это позволит вашему компьютеру реагировать на другие виды использования, пока компиляция выполняется в фоновом режиме. Исполняемый файл FreeCAD в конечном итоге появится в каталоге {{incode|freecad-build/bin}}. См. также [[Compiling_(Speeding_up)|Compiling (speeding up)]] для повышения скорости компиляции.
Опция {{incode|-j}} {{incode|make}} определяет, сколько задач (файлов) компилируется параллельно. Программа {{incode|nproc}} выводит количество ядер процессора в вашей системе; используя ее вместе с опцией {{incode|-j}}, вы можете обработать столько файлов, сколько у вас ядер, чтобы ускорить общую компиляцию программы. В приведенном выше примере он будет использовать все ядра вашей системы, кроме двух; это позволит вашему компьютеру реагировать на другие виды использования, пока компиляция выполняется в фоновом режиме. Исполняемый файл FreeCAD в конечном итоге появится в каталоге {{incode|freecad-build/bin}}. См. также [[Compiling_(Speeding_up)|Compiling (speeding up)]] для повышения скорости компиляции.
</div>


=== Resolving cmake issues ===
=== Resolving cmake issues ===


If you have done an out-of-source build before and get stuck on a dependency that is not recognized or can't seem to be resolved, try the following:
If you have done a build before and get stuck on a dependency that is not recognized or can't seem to be resolved, try the following:


* Delete the contents of the build directory before running cmake again. FreeCAD is a rapidly moving target, you may be tripping over cached cmake information that points at an older version than the new repository head can use. Clearing the cache may allow cmake to recover and recognize the version you actually need.
* Delete the contents of the build directory before running cmake again. FreeCAD is a rapidly moving target, you may be tripping over cached cmake information that points at an older version than the new repository head can use. Clearing the cache may allow cmake to recover and recognize the version you actually need.
Line 502: Line 566:
* If cmake complains about missing a specific file, use a tool such as "apt-file search", or its equivalent in other package systems, to discover what package that file belongs to and install it. Bear in mind that you are likely to need the -dev version of the package that carries header or config files files required for FreeCAD to use the package.
* If cmake complains about missing a specific file, use a tool such as "apt-file search", or its equivalent in other package systems, to discover what package that file belongs to and install it. Bear in mind that you are likely to need the -dev version of the package that carries header or config files files required for FreeCAD to use the package.


=== Compiling against GNU libc 2.34 and later ===
=== Сборка в папке исходников ===


GNU libc 2.34 introduces a change to the library that can cause builds on some Linux systems to fail with an error like:
Сборки с исходным кодом подходят, если вы хотите быстро скомпилировать версию FreeCAD и не собираетесь часто обновлять исходный код. В этом случае вы можете удалить скомпилированную программу и исходный код, только удалив одну папку.


{{Code|lang=bash|code=
Перейдите в исходный каталог и укажите {{incode|cmake}} на текущий каталог (обозначенный одной точкой):
No rule to make target '/usr/lib/x86_64-linux-gnu/libdl.so
}}

To resolve this, a symbolic link must be manually created from the (now empty) system-installed libdl.so.* to the location your compiler says it is looking for the file. For example (if the actual installed copy of libdl.so on your system is /usr/lib/x86_64-linux-gnu/libdl.so.2):


{{Code|lang=bash|code=
{{Code|lang=bash|code=
sudo ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so
cd freecad-source
cmake . -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3
make -j$(nproc --ignore=2)
}}
}}


Adapt the command for the structure of your system by searching for libdl.so* and linking it to the appropriate location.
Исполняемый файл FreeCAD будет находиться в каталоге {{incode|freecad-source/bin}}


<span id="How_to_repair_your_source_code_directory"></span>
=== Как восстановить папку с исходными кодами ===
=== Как восстановить папку с исходными кодами ===


Line 530: Line 597:
Если вы не очистите исходный каталог, следующие запуски {{incode|cmake}} могут не включить новые параметры в систему, если код изменится.
Если вы не очистите исходный каталог, следующие запуски {{incode|cmake}} могут не включить новые параметры в систему, если код изменится.


<span id="Configuration"></span>
=== Конфигурирование ===
=== Конфигурирование ===


Line 565: Line 633:
В качестве альтернативы используйте команду {{incode|cmake-LH}} для отображения текущей конфигурации и, следовательно, всех переменных, которые можно изменить. Вы также можете установить и использовать {{incode|cmake-gui}} для запуска графического интерфейса, отображающего все переменные, которые можно изменить. В следующих разделах мы перечислим некоторые из наиболее важных опций, которые вы, возможно, захотите использовать.
В качестве альтернативы используйте команду {{incode|cmake-LH}} для отображения текущей конфигурации и, следовательно, всех переменных, которые можно изменить. Вы также можете установить и использовать {{incode|cmake-gui}} для запуска графического интерфейса, отображающего все переменные, которые можно изменить. В следующих разделах мы перечислим некоторые из наиболее важных опций, которые вы, возможно, захотите использовать.


<span id="For_a_Debug_build"></span>
==== Для Debug сборки ====
==== Для Debug сборки ====


Line 570: Line 639:


{{Code|lang=bash|code=
{{Code|lang=bash|code=
cmake -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Debug ../freecad-source
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Debug ../freecad-source
}}
}}


<span id="For_a_Release_build"></span>
==== Для Release сборки ====
==== Для Release сборки ====


Line 578: Line 648:


{{Code|lang=bash|code=
{{Code|lang=bash|code=
cmake -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release ../freecad-source
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release ../freecad-source
}}
}}


<span id="Building_against_Python_3_and_Qt5"></span>
==== Сборка на основе Python 3 и Qt5 ====
==== Сборка на основе Python 3 и Qt5 ====


<div class="mw-translate-fuzzy">
По умолчанию FreeCAD 0.19 и более ранние версии созданы для Python 2 и Qt4. Поскольку эти два пакета устарели, лучше создавать для Python 3 и Qt5. Поддержка Python 2 и Qt4 была удалена в FreeCAD 0.20, и нет необходимости явно включать Qt5 и Python 3 при компиляции последних версий разработки.
По умолчанию FreeCAD 0.19 и более ранние версии созданы для Python 2 и Qt4. Поскольку эти два пакета устарели, лучше создавать для Python 3 и Qt5. Поддержка Python 2 и Qt4 была удалена в FreeCAD 0.20, и нет необходимости явно включать Qt5 и Python 3 при компиляции последних версий разработки.
</div>


<div class="mw-translate-fuzzy">
В современном дистрибутиве Linux вам нужно указать только две переменные, указывающие использование Qt5, и путь к интерпретатору Python.

Для 0.19:
{{Code|lang=bash|code=
cmake -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 ../freecad-source
}}

Для 0.20_dev:
Для 0.20_dev:
</div>
{{Code|lang=bash|code=
{{Code|lang=bash|code=
cmake ../freecad-source
cmake ../freecad-source
}}
}}


<div class="mw-translate-fuzzy">
Обратите внимание, что при переключении между сборками 0.19 и 0.20 может потребоваться удалить CMakeCache.txt до запуска cmake.
Обратите внимание, что при переключении между сборками 0.19 и 0.20 может потребоваться удалить CMakeCache.txt до запуска cmake.
</div>


<span id="Building_for_a_specific_Python_version"></span>
==== Сборка с применением особых версий Python ====
==== Сборка с применением особых версий Python ====


<div class="mw-translate-fuzzy">
Если по умолчанию исполняемый файл {{incode|python}} в вашей системе является символической ссылкой на Python 2, {{incode|cmake}} попытается настроить FreeCAD для этой версии. Вы можете выбрать другую версию Python, указав путь к определенному исполняемому файлу:
Если по умолчанию исполняемый файл {{incode|python}} в вашей системе является символической ссылкой на Python 2, {{incode|cmake}} попытается настроить FreeCAD для этой версии. Вы можете выбрать другую версию Python, указав путь к определенному исполняемому файлу:
</div>


{{Code|lang=bash|code=
{{Code|lang=bash|code=
Line 625: Line 698:
Вы можете использовать {{incode|python3 -m site}} в терминале для определения каталога {{incode|site-packages}} или {{incode|dist-packages}} для систем Debian.
Вы можете использовать {{incode|python3 -m site}} в терминале для определения каталога {{incode|site-packages}} или {{incode|dist-packages}} для систем Debian.


Some components of FreeCAD, such as PySide, try to autodetect the most recent Python version installed on your system, which might fail if it is different from what you entered above. Adding the following cMake option might solve the issue:

{{Code|lang=bash|code=
-DPython3_FIND_STRATEGY=LOCATION
}}

<span id="Building_with_Qt_Creator_against_Python_3_and_Qt5"></span>
==== Сборка в Qt Creator на основе Python 3 и Qt5 ====
==== Сборка в Qt Creator на основе Python 3 и Qt5 ====


Line 635: Line 715:
4. Выбрав файл, он автоматически запустит {{incode|cmake}} на нем, но может выйти из строя, если соответствующие параметры установлены неправильно.
4. Выбрав файл, он автоматически запустит {{incode|cmake}} на нем, но может выйти из строя, если соответствующие параметры установлены неправильно.


<div class="mw-translate-fuzzy">
5. Перейдите в {{MenuCommand|Projects → Build & Run → Imported Kit → Build → Build Settings → CMake}}. Установите соответствующий каталог сборки, {{incode|freecad-build/}}.
5. Перейдите в {{MenuCommand|Projects → Build & Run → Imported Kit → Build → Build Settings → CMake}}. Установите соответствующий каталог сборки, {{incode|freecad-build/}}.
</div>


6. Установите соответствующие переменные в диалоговом окне Key-Value типов {{incode|String}} и {{incode|Bool}}.
6. Установите соответствующие переменные в диалоговом окне Key-Value типов {{incode|String}} и {{incode|Bool}}.
{{Code|code=
{{Code|code=
PYTHON_EXECUTABLE=/usr/bin/python3
PYTHON_EXECUTABLE=/usr/bin/python3
BUILD_QT5=ON
}}
}}


Line 650: Line 731:
PYTHON_LIBRARY:STRING=/usr/lib/x86_64-linux-gnu/libpython3.7m.so
PYTHON_LIBRARY:STRING=/usr/lib/x86_64-linux-gnu/libpython3.7m.so
PYTHON_PACKAGES_PATH:STRING=/usr/lib/python3.7/site-packages
PYTHON_PACKAGES_PATH:STRING=/usr/lib/python3.7/site-packages
BUILD_QT5:BOOL=ON
}}
}}


Line 665: Line 745:
9. Наконец, перейдите в меню {{MenuCommand|Сборка → Проект сборки "FreeCAD"}}. Если это новая компиляция, она должна занять несколько минут, включительно часов, в зависимости от количества доступных процессоров.
9. Наконец, перейдите в меню {{MenuCommand|Сборка → Проект сборки "FreeCAD"}}. Если это новая компиляция, она должна занять несколько минут, включительно часов, в зависимости от количества доступных процессоров.


<span id="Qt_designer_plugin"></span>
==== Плагин Qt designer ====
==== Плагин Qt designer ====


Line 693: Line 774:
}}
}}


<span id="External_or_internal_Pivy"></span>
==== Внешний или встроенный Pivy ====
==== Внешний или встроенный Pivy ====


Line 699: Line 781:
Использование внешнего Pivy стало по умолчанию во время разработки FreeCAD 0.16, поэтому эту опцию больше не нужно устанавливать вручную.
Использование внешнего Pivy стало по умолчанию во время разработки FreeCAD 0.16, поэтому эту опцию больше не нужно устанавливать вручную.


<span id="Doxygen_documentation"></span>
==== Документирование посредством Doxygen ====
==== Документирование посредством Doxygen ====


Если у вас установлен Doxygen, вы можете создать документацию по исходному коду. См. инструкции в [[source documentation]].
Если у вас установлен Doxygen, вы можете создать документацию по исходному коду. См. инструкции в [[source documentation]].


<span id="Additional_documentation"></span>
=== Дополнительная документация ===
=== Дополнительная документация ===


Line 713: Line 797:
(блог) , предварительно изучив программирование.
(блог) , предварительно изучив программирование.


<span id="Making_a_debian_package"></span>
=== Создание пакета debian ===
=== Создание пакета debian ===


Line 733: Line 818:
}}
}}


==== *.deb package with checkinstall ====

The Debian script {{incode|checkinstall}} allows to create a *.deb package that can be installed and removed with the standard {{incode|dpkg}} commands. It may need to be installed first (on Ubuntu use {{incode|sudo apt install checkinstall}}). It's interactive and asks for the required information providing helpful defaults. During the process the package is installed and a *.deb file and a backup archive are created.

It's a good idea to define a name and a short description for the package. The name must be entered to uninstall it again and the desription will be listed by {{incode|dpkg -l}}. The default name "build" is not very informative.

Example:

{{Code|lang=bash|code=
cd freecad-source/build
cmake ..
make
sudo checkinstall # e.g. name=freecad-test1
}}

The result is a *.deb file in the build folder. {{incode|checkinstall}} will install the build by default. This is how you can install or uninstall it:

{{Code|lang=bash|code=
cd freecad-source/build
ls <nowiki>|</nowiki> grep freecad
freecad-test1_20220814-1_amd64.deb
sudo dpkg -i freecad-test1_20220814-1_amd64.deb # install
dkpg -l <nowiki>|</nowiki> grep freecad # find by name
sudo dpkg -r freecad-test1 # uninstall by name
}}

<span id="Updating_the_source_code"></span>
== Обновление исходного кода ==
== Обновление исходного кода ==


Line 752: Line 864:
}}
}}


== Uninstalling the source code ==

In case the compiled source code was installed with {{incode|sudo make install}} (for Debian) the files were copied to the {{FileName|/usr/local}} folder into several subfolders. For uninstallation the file {{FileName|install_manifest.txt}} can be used. It has been created into the build folder during compilation and contains all installed files. As long as this file exists, the installation can be uninstalled.

{{Code|lang=bash|code=
cd freecad-source/freecad-build
xargs sudo rm < install_manifest.txt
}}

<span id="Troubleshooting"></span>
== Разрешение проблем ==
== Разрешение проблем ==


<span id="For_64_bit_systems"></span>
=== Примечание для 64-битных систем ===
=== Примечание для 64-битных систем ===


Line 764: Line 887:
Для систем на базе Debian эта опция не требуется при использовании готовых пакетов OpenCASCADE, поскольку эти пакеты устанавливают правильно {{incode|CXXFLAGS}} внутри.
Для систем на базе Debian эта опция не требуется при использовании готовых пакетов OpenCASCADE, поскольку эти пакеты устанавливают правильно {{incode|CXXFLAGS}} внутри.


<span id="Automatic_build_scripts"></span>
== Скрипты автоматической компиляции ==
== Скрипты автоматической компиляции ==


Line 787: Line 911:
sudo apt-get install freecad-daily
sudo apt-get install freecad-daily


git clone https://github.com/FreeCAD/FreeCAD.git freecad-source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source
mkdir freecad-build
mkdir freecad-build
cd freecad-build
cd freecad-build
cmake -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 -DFREECAD_USE_PYBIND11=ON ../freecad-source
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DFREECAD_USE_PYBIND11=ON ../freecad-source
make -j$(nproc --ignore=2)
make -j$(nproc --ignore=2)
}}
}}
Line 831: Line 955:
# get the source
# get the source
git clone https://github.com/FreeCAD/FreeCAD.git free-cad
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git free-cad
# Now you will have a subfolder in this location called free-cad. It contains the source
# Now you will have a subfolder in this location called free-cad. It contains the source
Line 899: Line 1,023:
# checkout the latest source
# checkout the latest source
git clone https://github.com/FreeCAD/FreeCAD.git freecad
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad
# go to source dir
# go to source dir
Line 953: Line 1,077:
mkdir $MAIN_DIR <nowiki>||</nowiki> { echo "~/$MAIN_DIR already exist. Quitting.."; exit; }
mkdir $MAIN_DIR <nowiki>||</nowiki> { echo "~/$MAIN_DIR already exist. Quitting.."; exit; }
cd $MAIN_DIR
cd $MAIN_DIR
git clone https://github.com/FreeCAD/FreeCAD.git
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git
mkdir $BUILD_DIR <nowiki>||</nowiki> { echo "~/$BUILD_DIR already exist. Quitting.."; exit; }
mkdir $BUILD_DIR <nowiki>||</nowiki> { echo "~/$BUILD_DIR already exist. Quitting.."; exit; }
cd $BUILD_DIR
cd $BUILD_DIR
Line 964: Line 1,088:
<div class="mw-collapsible mw-collapsed toccolours">
<div class="mw-collapsible mw-collapsed toccolours">


<span id="Arch_using_AUR"></span>
=== Arch с использованием AUR ===
=== Arch с использованием AUR ===


Line 972: Line 1,097:
Обязательное требование : git
Обязательное требование : git


<div class="mw-translate-fuzzy">
Шаги :
Шаги :
#Откройте терминал. При необходимости создайте каталог, например. {{incode | mkdir git}}. При необходимости измените каталог, например. {{incode|cd git}}.
#Откройте терминал. При необходимости создайте каталог, например. {{incode | mkdir git}}. При необходимости измените каталог, например. {{incode|cd git}}.
Line 978: Line 1,104:
#Компиляция с использованием [https://wiki.archlinux.org/index.php/Makepkg Arch makepkg] : {{incode|makepkg -s}}. Флаг -s или --syncdeps также установит необходимые зависимости.
#Компиляция с использованием [https://wiki.archlinux.org/index.php/Makepkg Arch makepkg] : {{incode|makepkg -s}}. Флаг -s или --syncdeps также установит необходимые зависимости.
#Установите созданный пакет : {{incode|makepkg --install}} или дважды щелкните имя файла pkgname-pkgver.pkg.tar.xz в вашем браузере файлов.
#Установите созданный пакет : {{incode|makepkg --install}} или дважды щелкните имя файла pkgname-pkgver.pkg.tar.xz в вашем браузере файлов.
</div>


<div class="mw-translate-fuzzy">
Чтобы обновить FreeCAD до последней версии, просто повторите шаг 3. Обновите репозиторий, когда в рецепте произойдет какое-либо изменение или появятся новые функции, используя {{incode|git checkout-f}} внутри каталога.
Чтобы обновить FreeCAD до последней версии, просто повторите шаг 3. Обновите репозиторий, когда в рецепте произойдет какое-либо изменение или появятся новые функции, используя {{incode|git checkout-f}} внутри каталога.
</div>





Revision as of 09:51, 27 March 2024

Существует экспериментальный контейнер FreeCAD Docker, который протестирован для разработки FreeCAD. Подробнее на странице Компиляция в Docker

Обзор

В последних дистрибутивах Linux, FreeCAD, как правило, собирается легко, поскольку все зависимости обычно предоставляются менеджером пакетов. В основном сборка включает 3 этапа:

  1. Получение исходного кода FreeCAD.
  2. Получение зависимостей, или пакетов, от которых зависит FreeCAD
  3. Настройка с помощью cmake и компиляция с помощью make.

Ниже вы найдете подробное описание процесса сборки, некоторых скриптов компиляции и особенностей, с которыми Вы можете столкнуться. Если вы найдете ошибки, устаревшие сведения (дистрибутивы Linux меняются быстро), или если вы используете дистрибутив, которого нет в списке, обсудите вопрос на форуме, и помогите нам исправить это.

Общий рабочий процесс для компиляции FreeCAD из исходников. В систем должны быть как сторонние зависимости, так и исходные коды самого FreeCAD. CMake конфигурирует систему так чтобы весь проект скомпилировался одной инструкцией make.

Получение исходных кодов

Git

Лучший способ получить код это клонировать Git репозиторий Git только-для-чтения. Для этого вам потребуется программа git, которую легко установить в большинство дистрибутивов Linux. Скачать её можно на официальном веб-сайте.

Git может быть установлен, следующей командой:

sudo apt install git

Следующая команда, копирует последнюю версию исходного кода FreeCAD в папку freecad-source.

git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source

Дополнительная информация о применении Git и внесении кода в проект изложена на странице управление исходным кодом.

Архив с исходным кодом

Кроме того, вы можете загрузить исходники непосредственно с GitHub, в качестве .zip или .tar.gz архива, и распаковать его в заданный каталог.

Установка зависимостей (Dependencies)

Для компиляции FreeCAD необходимо установить требуемые зависимости (dependencies), упомянутые в сторонних библиотеках; пакеты, содержащие эти зависимости для различных дистрибутивов Linux, перечислены ниже. Обратите внимание, что имена и доступность библиотек будут зависеть от вашего конкретного дистрибутива; если ваш дистрибутив устарел, некоторые пакеты могут быть недоступны или иметь другое имя. В этом случае посмотрите раздел ↓ старые и нестандартные дистрибутивы расположенный ниже.

Как только у вас будут установлены все зависимости, приступайте к сборке FreeCAD.

Обратите внимание, что размер исходного кода FreeCAD составляет около 500 МБ; он может быть в три раза больше, если вы клонируете репозиторий Git со всей историей его изменений. Для получения всех зависимостей может потребоваться загрузка 500 МБ или более новых файлов; при распаковке этих файлов может потребоваться 1500 МБ или более места. Также имейте в виду, что в процессе компиляции может быть создано до 1500 МБ дополнительных файлов, поскольку система копирует и изменяет весь исходный код. Поэтому при попытке компиляции убедитесь, что на вашем жестком диске достаточно свободного места, по крайней мере, не менее 4 ГБ.

Debian и Ubuntu

В системах основанных на Debian (Debian, Ubuntu, Mint, и т.п.) довольно легко установить все необходимые зависимости. Большинство библиотек доступны через apt или менеджер пакетов Synaptic.

Если вы уже установили FreeCAD из официальных репозиториев, вы можете установить зависимости (dependencies) для его сборки с помощью этой единственной строки кода в терминале:

sudo apt build-dep freecad

Однако, если версия FreeCAD в репозиториях старая, зависимости (dependencies) могут быть уже устаревшими для компиляции последней версии FreeCAD. Поэтому, пожалуйста, убедитесь, что вы установили следующие пакеты.

Эти пакеты необходимы для успешной компиляции в целом:

  • build-essential, устанавливает компиляторы C и C++ , библиотеки разработки C и make утилиту.
  • cmake, необходимый инструмент для настройки исходников FreeCAD. Вы также можете установить cmake-gui и cmake-curses-gui чтобы иметь графический интерфейс для данной утилиты.
  • libtool, необходимые инструменты для создания shared библиотек.
  • lsb-release, стандартная утилита базовой отчетности обычно уже установлена в системе Debian и позволяет программно различать чистую установку Debian или ее вариант, такой как Ubuntu или Linux Mint. Не удаляйте этот пакет, так как от него могут зависеть многие другие системные пакеты.

При компиляции FreeCAD используется язык Python, и он также используется в runtime в качестве языка сценариев. Если вы используете дистрибутив на основе Debian, интерпретатор Python как правило уже установлен в нем.

  • python3
  • swig, это инструмент, который создает интерфейсы между кодом C++ и Python.

Пожалуйста, убедитесь, что у вас установлен Python 3. Python 2 устарел в 2019 году, свежая разработка FreeCAD не тестируется с этой версией языка.

Boost библиотеки должны быть обязательно установлены:

  • libboost-dev
  • libboost-date-time-dev
  • libboost-filesystem-dev
  • libboost-graph-dev
  • libboost-iostreams-dev
  • libboost-program-options-dev
  • libboost-python-dev
  • libboost-regex-dev
  • libboost-serialization-dev
  • libboost-thread-dev

Должны быть установлены Coin библиотеки:

  • libcoin80-dev, для Debian Jessie, Stretch, Ubuntu с 16.04 до 18.10, или
  • libcoin-dev, для Debian Buster, Ubuntu 19.04 и выше, а так же Ubuntu 18.04/18.10 вместе с freecad-stable/freecad-daily PPAs должны быть добавлены в иходники.

Несколько библиотек, которые занимаются вычислениями, триангулированными поверхностями, сортировкой, мешами (meshes), компьютерным зрением, картографическими проекциями, 3D-визуализацией, оконной системой X11, парсингом XML и чтением Zip-файлов:

  • libeigen3-dev
  • libgts-bin
  • libgts-dev
  • libkdtree++-dev
  • libmedc-dev
  • libopencv-dev or libcv-dev
  • libproj-dev
  • libvtk7-dev or libvtk6-dev
  • libx11-dev
  • libxerces-c-dev
  • libyaml-cpp-dev
  • libzipios++-dev

Python 2 и Qt4

Python 2 и Qt4 уже устарели и не рекомендуются к применению. Начиная с версии 0.20, в FreeCAD они больше не поддерживаются.

При компиляции FreeCAD в Debian Jessie, Stretch, Ubuntu 16.04, используйте Python 2 и Qt4, установив следующие зависимости:

  • qt4-dev-tools
  • libqt4-dev
  • libqt4-opengl-dev
  • libqtwebkit-dev
  • libshiboken-dev
  • libpyside-dev
  • pyside-tools
  • python-dev
  • python-matplotlib
  • python-pivy
  • python-ply
  • python-pyside

Python 3 и Qt5

При компиляции FreeCAD в Debian Buster, Ubuntu 19.04 и выше, а также Ubuntu 18.04/18.10 с freecad-stable/freecad-daily PPAs добавленным в ваш исходный код, установите следующие зависимости.

  • qtbase5-dev
  • qttools5-dev
  • qt5-default (if compiling 0.20 on a machine that still has Qt4)
  • libqt5opengl5-dev
  • libqt5svg5-dev
  • qtwebengine5-dev
  • libqt5xmlpatterns5-dev
  • libqt5x11extras5-dev
  • libpyside2-dev
  • libshiboken2-dev
  • pyside2-tools
  • pyqt5-dev-tools
  • python3-dev
  • python3-matplotlib
  • python3-packaging
  • python3-pivy
  • python3-ply
  • python3-pyside2.qtcore
  • python3-pyside2.qtgui
  • python3-pyside2.qtsvg
  • python3-pyside2.qtwidgets
  • python3-pyside2.qtnetwork
  • python3-pyside2.qtwebengine
  • python3-pyside2.qtwebenginecore
  • python3-pyside2.qtwebenginewidgets
  • python3-pyside2.qtwebchannel
  • python3-pyside2uic

Ядро OpenCascade

Ядро OpenCascade - это основная графическая библиотека для создания 3D-фигур. Она существует в виде официальной версии OCCT и виде версии для сообщества OCE. Версия для сообщества к применению больше не рекомендуется, так как она устарела.

Для Debian Buster и Ubuntu 18.10 и выше, а так же для Ubuntu 18.04 с freecad-stable/freecad-daily PPAs добавлеными в ваши исходники, установите официальные пакеты.

  • libocct*-dev
    • libocct-data-exchange-dev
    • libocct-draw-dev
    • libocct-foundation-dev
    • libocct-modeling-algorithms-dev
    • libocct-modeling-data-dev
    • libocct-ocaf-dev
    • libocct-visualization-dev
  • occt-draw

Для Debian Jessie, Stretch, Ubuntu 16.04 и выше, установите community edition пакеты.

  • liboce*-dev
    • liboce-foundation-dev
    • liboce-modeling-dev
    • liboce-ocaf-dev
    • liboce-ocaf-lite-dev
    • liboce-visualization-dev
  • oce-draw

Вы можете установить библиотеки по отдельности или сразу несколько с похожим именами используя символ звездочку '*'. Замените occ на oce если вы хотите установить community редакцию библиотек.

sudo apt install libocct*-dev

Необязательные к установке пакеты

При желании вы также можете установить эти дополнительные пакеты:

  • libsimage-dev, чтобы Coin поддерживал дополнительные форматы файлов изображений.
  • doxygen и libcoin-doc (или libcoin80-doc для старых систем), если вы хотите автоматический генерировать документацию к исходному коду.
  • libspnav-dev, для поддержки устройств 3D ввода, таких как 3Dconnexion "Space Navigator" или "Space Pilot".
  • checkinstall, если вы хотите зарегистрировать установленные файлы в диспетчере пакетов вашей системы, чтобы вы могли удалить их позже.

Устаовка Python 3 и Qt5 одной командой

Требуется, чтобы Pyside2 был доступен в Debian buster и freecad-stable/freecad-daily PPAs.

sudo apt install cmake cmake-gui libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside2-dev libqt5opengl5-dev libqt5svg5-dev qtwebengine5-dev libqt5x11extras5-dev libqt5xmlpatterns5-dev libshiboken2-dev libspnav-dev libvtk7-dev libx11-dev libxerces-c-dev libzipios++-dev occt-draw pyside2-tools python3-dev python3-matplotlib python3-packaging python3-pivy python3-ply python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtsvg python3-pyside2.qtwidgets python3-pyside2.qtnetwork python3-pyside2.qtwebengine python3-pyside2.qtwebenginecore python3-pyside2.qtwebenginewidgets python3-pyside2.qtwebchannel python3-markdown python3-git python3-pyside2uic qtbase5-dev qttools5-dev swig libyaml-cpp-dev

ПРИМЕЧАНИЕ: В некоторых версиях Ubuntu и некоторых версиях Qt вы получите сообщение об ошибке, что python3-pyside2uic не может быть найден-в этих системах вы можете безопасно опустить его. В Ubuntu 20.04 вам нужно будет добавить pyqt5-dev-tools. Более подробную информацию можно найти в это обсуждение на форуме.

Установка Python 2 и Qt4 одной коммандой

Это не рекомендуется для более новых установок, поскольку и Python 2 и Qt4 являются устаревшими.

sudo apt install cmake debhelper dh-exec dh-python libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin80-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libshiboken-dev libspnav-dev libvtk6-dev libx11-dev libxerces-c-dev libzipios++-dev lsb-release occt-draw pyside-tools python-dev python-matplotlib python-pivy python-ply swig

Пользователи Ubuntu 16.04, пожалуйста, ознакомьтесь также с обсуждением компиляции на форуме: Компиляция в Linux (Kubuntu): CMake не может найти VTK.

Raspberry Pi

Выполните те же действия, что и в Debian и Ubuntu.

Сообщалось о проблемах при попытке компиляции в Raspbian с Python 3 и Qt5, но комбинация Python 3 и Qt4, похоже, работает для более старых версий FreeCAD.

Для более новых версий FreeCAD компиляция с Py3/Qt5 проходит успешно, если установлена операционная система Ubuntu 20.04.

Из-за различных проблем с Qt в этой версии обычные PySide tools не будут найдены.

E: Unable to locate package python3-pyside2uic

В этом случае мы можем установить пакеты из PyQt и создать символические ссылки на необходимые инструменты.

sudo apt-get install pyqt5-dev
sudo apt-get install pyqt5-dev-tools
cd /usr/bin/
ln -s pyrcc5 pyside2-rcc
ln -s pyuic5 pyside2-uic

Теперь компиляция может быть продолжена.

cd freecad-build/
cmake ../freecad-source -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 -DUSE_PYBIND11=ON
make -j2

Параметр -j для make не должен превышать 3, поскольку Raspberry Pi имеет ограниченную память. На компиляцию уйдет несколько часов, поэтому лучше сделать это за ночь.

Дополнительная информация, FreeCAD и Raspberry Pi 4.

Fedora

There is a bug in cmake distributed by Fedora 34/35 which results in cmake failing to find the opencascade libraries. This can easily be fixed by making one minor change to the top level cmake file of opencascade installed on Fedora. Details here: https://bugzilla.redhat.com/show_bug.cgi?id=2083568.

Near the top of the file OpenCASCADEConfig.cmake, change the following line to use REAL_PATH(). This fixes a bug introduced by the use of a symlink from /lib to /usr/lib of Fedora, which causes cmake to fail.

This file is usually installed in /usr/lib64/cmake/opencascade/OpenCASCADEConfig.cmake.

get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)

change this to:

file (REAL_PATH ${OpenCASCADE_INSTALL_PREFIX} OpenCASCADE_INSTALL_PREFIX)

This trivial change needs to be made inside the build directory once cmake has been run and failed. Re-running cmake will then correctly detect the OCCT libraries in the normal way.

Fedora38/39

Now install Python 3.11. This includes a notable change in how Python initializes when running a program. As a result FreeCAD fails to find OpenCamLib, meaning 3D Surface and Waterline are not available in the CAM Workbench. This was fixed in the master branch on 20th Mar 2024 (Pull request #13059).

Вам нужны следующие пакеты :

  • gcc-c++ (or possibly another C++ compiler?)
  • cmake
  • doxygen
  • swig
  • gettext
  • dos2unix
  • desktop-file-utils
  • libXmu-devel
  • freeimage-devel
  • mesa-libGLU-devel
  • opencascade-devel
  • openmpi-devel
  • python3
  • python3-devel
  • python3-pyside2
  • python3-pyside2-devel
  • pyside2-tools
  • boost-devel
  • tbb-devel
  • eigen3-devel
  • qt-devel
  • qt5-qtwebengine-devel
  • qt5-qtxmlpatterns
  • qt5-qtxmlpatterns-devel
  • qt5-qtsvg-devel
  • qt5-qttools-static
  • ode-devel
  • xerces-c
  • xerces-c-devel
  • opencv-devel
  • smesh-devel
  • Coin3
  • Coin3-devel
  • yaml-cpp

(Не перепутайте "Coin" с "coin" - тот что с маленькой буквы это финансовый пакет. Апрельские Coin4 и Coin4-devel 2021 уже доступны) (если coin2 является последней доступной версией для вашей версии Fedora, используйте пакеты из http://www.zultron.com/rpm-repo/)

  • SoQt-devel
  • freetype
  • freetype-devel
  • vtk
  • vtk-devel
  • med
  • med-devel

Можете добавить, если требуется:

  • libspnav-devel (для поддержки устройств 3Dconnexion, вроде Space Navigator или Space Pilot)
  • pivy ( https://bugzilla.redhat.com/show_bug.cgi?id=458975 Pivy не обязателен, но нужен для верстака Draft)

To install all dependencies at once (tested on fedora 36 and 37):

sudo dnf install gcc-c++ cmake doxygen swig gettext dos2unix desktop-file-utils libXmu-devel freeimage-devel mesa-libGLU-devel opencascade-devel openmpi-devel python3 python3-devel python3-pyside2 python3-pyside2-devel pyside2-tools boost-devel tbb-devel eigen3-devel qt-devel qt5-qtwebengine-devel qt5-qtxmlpatterns qt5-qtxmlpatterns-devel qt5-qtsvg-devel qt5-qttools-static ode-devel xerces-c xerces-c-devel opencv-devel smesh-devel Coin3 Coin3-devel SoQt-devel freetype freetype-devel vtk vtk-devel med med-devel libspnav-devel python3-pivy python3-markdown python3-GitPython yaml-cpp

Gentoo

Простейший путь проверить, какие пакеты нужны для компиляции FreeCAD это проверить через portage:

emerge -pv freecad

Вы получите список дополнительных пакетов, которые следует установить на Вашей системе.

Если FreeCAD недоступен в portage, он доступен в оверлее waebbl. Система отслеживания ошибок на оверлее waebbl Github может помочь решить некоторые проблемы, с которыми вы можете столкнуться. Оверлей предоставляет freecad-9999, который вы можете выбрать для компиляции или просто использовать для получения зависимостей.

layman -a waebbl

openSUSE

Tumbleweed

Следующие команды установят пакеты, необходимые для создания FreeCAD с Qt5 и Python 3.

zypper in --no-recommends -t pattern devel_C_C++ devel_qt5

zypper in libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel boost-devel swig libboost_program_options-devel libboost_mpi_python3-devel libboost_system-devel libboost_program_options-devel libboost_regex-devel libboost_python3-devel libboost_thread-devel libboost_system-devel libboost_headers-devel libboost_graph-devel python3 python3-devel python3-matplotlib python3-matplotlib-qt5 python3-pyside2 python3-pyside2-devel python3-pivy gcc gcc-fortran cmake occt-devel libXi-devel opencv-devel libxerces-c-devel Coin-devel SoQt-devel freetype2-devel eigen3-devel libode6 vtk-devel libmed-devel hdf5-openmpi-devel openmpi2-devel netgen-devel freeglut-devel libspnav-devel f2c doxygen dos2unix glew-devel yaml-cpp

Следующая команда установит Qt Creator и отладчик проекта GNU.

zypper in libqt5-creator gdb

Если какие-либо пакеты отсутствуют, вы можете проверить Tumbleweed [1] "FreeCAD.spec" файл на [2] Откройте Службу сборки.

Также, проверьте, есть ли какие-либо исправления, которые вам необходимо использовать (например 0001-find-openmpi2-include-files.patch).

Leap

Если есть разница между доступными пакетами на Tumbleweed и Leap, то вы можете прочитать Leap [3] файл "FreeCAD.spec" на [4] Откройте службу сборки, чтобы определить необходимые пакеты.

Смотрите piano_jonas unofficial "Compile On openSUSE" guide.

Arch Linux

Вам понадобятся следующие библиотеки из официальных архивов:

  • boost
  • cmake
  • coin
  • curl
  • desktop-file-utils
  • eigen
  • gcc-fortran
  • git
  • glew
  • hicolor-icon-theme
  • jsoncpp
  • libspnav
  • med
  • nlohmann-json
  • opencascade
  • pyside2-tools
  • pyside2
  • python-matplotlib
  • python-netcdf4
  • python-packaging
  • python-pivy
  • qt5-svg
  • qt5-tools
  • qt5-webengine
  • shared-mime-info
  • shiboken2
  • swig
  • utf8cpp
  • verdict
  • xerces-c
  • yaml-cpp
sudo pacman -S --needed boost cmake coin curl desktop-file-utils eigen gcc-fortran git glew hicolor-icon-theme jsoncpp libspnav med nlohmann-json opencascade pyside2-tools pyside2 python-matplotlib python-netcdf4 python-packaging python-pivy qt5-svg qt5-tools qt5-webengine shared-mime-info shiboken2 swig utf8cpp xerces-c yaml-cpp

Note: Since version 5.0.1 of the openmpi package the binary libmpi_cxx.so stopped being shipped, this breaks the compilation with the current CMake process. To fix this you need to downgrade the package, see this forum post.

Более старые и нетрадиционные дистрибутивы

В других дистрибутивах у нас очень мало отзывов от пользователей, поэтому может быть сложнее найти необходимые пакеты.

Сначала попробуйте найти необходимые библиотеки, упомянутые в сторонние библиотеки в диспетчере пакетов. Остерегайтесь, что у некоторых из них может быть немного другое имя пакета; ищите name, но также libname, name-dev, name-devel и аналогичные. Если это невозможно, попробуйте скомпилировать эти библиотеки самостоятельно.

Для FreeCAD требуется версия компилятора GNU g++, равная или выше 3.0.0, так как FreeCAD в основном написан на C++. Во время компиляции выполняются некоторые сценарии Python, поэтому интерпретатор Python должен работать должным образом. Чтобы избежать каких-либо проблем с компоновщиком, также рекомендуется иметь пути к библиотеке в переменной LD_LIBRARY_PATH или в файле ld.so.conf. Это уже сделано в современных дистрибутивах Linux, но, возможно, потребуется установить в более старых.

Pivy

Pivy (обертки Python для Coin3d) не требуется для сборки FreeCAD или его запуска, но необходимы в качестве зависимости от среды выполнения для Draft Workbench. Если вы не собираетесь использовать эти инструментальные средства, вам не понадобится Pivy. Однако обратите внимание, что верстак Draft используется внутри других рабочих столов, таких как Arch и BIM, поэтому для использования этих инструментальных средств также необходимо установить Pivy.

К ноябрю 2015 года устаревшая версия Pivy, включенная в исходный код FreeCAD, больше не будет компилироваться во многих системах. Это не большая проблема, так как обычно вы должны получить Pivy от менеджера пакетов вашего дистрибутива; если вы не можете найти Pivy, вам, возможно, придется скомпилировать его самостоятельно, см. Инструкции по компиляции Pivy.

Отладочные символы

Для устранения неполадок в FreeCAD полезно иметь отладочные символы важных библиотек зависимостей, таких как Qt. Для этого попробуйте установить пакеты зависимостей, которые заканчиваются на -dbg, -dbgsym, -debuginfo или аналогичные, в зависимости от вашего дистрибутива Linux.

Для Ubuntu вам, возможно, потребуется включить специальные репозитории, чтобы иметь возможность просматривать и устанавливать эти отладочные пакеты с помощью диспетчера пакетов. См.Debug Symbol Packages для получения дополнительной информации.

Сборка FreeCAD

Python 2 и Qt4 при сборке больше не поддерживается, а в версии 0.20 больше не поддерживается вообще. Допускается компиляция с Python 3 и Qt5. А для версии 0.20 требуется как минимум Python3.6 и Qt 5.9.

FreeCAD использует CMake в качестве основной системы сборки, она доступна во всех основных операционных системах. Компиляция с помощью CMake обычно очень проста и происходит в два этапа.

  1. CMake проверяет наличие в вашей системе всех необходимых программ и библиотек и создает Makefile, настроенный для второго шага. FreeCAD имеет несколько вариантов конфигурации на выбор, но он поставляется с разумными настройками по умолчанию. Некоторые альтернативы подробно описаны ниже.
  2. Сама компиляция, которая выполняется с помощью программы make, которая генерирует исполняемые файлы FreeCAD.

Поскольку FreeCAD - это крупное приложение, компиляция всего исходного кода может занять от 10 минут до одного часа, в зависимости от вашего процессора и количества ядер процессора, используемых для компиляции.

Сборка вне папки исходников

Для сборки из исходного кода просто создайте каталог сборки freecad-build, отличный от вашей исходной папки FreeCAD, freecad-source; затем из этой точки каталога сборки cmake в нужную исходную папку. Вы также можете использовать cmake-gui или ccmake вместо cmake в приведенных ниже инструкциях. Как только cmake завершит конфигурацию среды, используйте make для запуска актуальной компиляции.

# from your freecad source folder:
mkdir build
cd build
cmake ../
make -j$(nproc --ignore=2)

Опция -j make определяет, сколько задач (файлов) компилируется параллельно. Программа nproc выводит количество ядер процессора в вашей системе; используя ее вместе с опцией -j, вы можете обработать столько файлов, сколько у вас ядер, чтобы ускорить общую компиляцию программы. В приведенном выше примере он будет использовать все ядра вашей системы, кроме двух; это позволит вашему компьютеру реагировать на другие виды использования, пока компиляция выполняется в фоновом режиме. Исполняемый файл FreeCAD в конечном итоге появится в каталоге freecad-build/bin. См. также Compiling (speeding up) для повышения скорости компиляции.

Resolving cmake issues

If you have done a build before and get stuck on a dependency that is not recognized or can't seem to be resolved, try the following:

  • Delete the contents of the build directory before running cmake again. FreeCAD is a rapidly moving target, you may be tripping over cached cmake information that points at an older version than the new repository head can use. Clearing the cache may allow cmake to recover and recognize the version you actually need.
  • If cmake complains about missing a specific file, use a tool such as "apt-file search", or its equivalent in other package systems, to discover what package that file belongs to and install it. Bear in mind that you are likely to need the -dev version of the package that carries header or config files files required for FreeCAD to use the package.

Compiling against GNU libc 2.34 and later

GNU libc 2.34 introduces a change to the library that can cause builds on some Linux systems to fail with an error like:

No rule to make target '/usr/lib/x86_64-linux-gnu/libdl.so

To resolve this, a symbolic link must be manually created from the (now empty) system-installed libdl.so.* to the location your compiler says it is looking for the file. For example (if the actual installed copy of libdl.so on your system is /usr/lib/x86_64-linux-gnu/libdl.so.2):

sudo ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so

Adapt the command for the structure of your system by searching for libdl.so* and linking it to the appropriate location.

Как восстановить папку с исходными кодами

Если вы случайно выполнили компиляцию в каталоге исходного кода или добавили странные файлы и хотели бы восстановить содержимое только в исходном исходном коде, вы можете выполнить следующие действия.

> .gitignore
git clean -df
git reset --hard HEAD

Первая строка очищает файл .gitignore. Это гарантирует, что следующие команды clean и reset будут влиять на все в каталоге и не будут игнорировать элементы, соответствующие выражениям в .gitignore. Вторая строка удаляет все файлы и каталоги, которые не отслеживаются репозиторием git, затем последняя команда сбрасывает все изменения в отслеживаемых файлах, включая первую команду, которая очистила файл .gitignore.

Если вы не очистите исходный каталог, следующие запуски cmake могут не включить новые параметры в систему, если код изменится.

Конфигурирование

Передавая различные параметры в cmake, вы можете изменить способ компиляции FreeCAD. Синтаксис выглядит следующим образом.

cmake -D <var>:<type>=<value> $SOURCE_DIR

Где $SOURCE_DIR - каталог, содержащий исходный код. <type> в большинстве случаев может быть опущен. Пробел после параметра -D также может быть опущен.

Например, чтобы избежать создания FEM Workbench:

cmake -D BUILD_FEM:BOOL=OFF ../freecad-source
cmake -DBUILD_FEM=OFF ../freecad-source

Все возможные переменные перечислены в файле InitializeFreeCADBuildOptions.cmake, расположенном в каталоге CMake/FreeCAD_Helpers. В этом файле найдёте слово option, чтобы перейти к переменным, которые можно задать, и просмотреть их значения по умолчанию.

# ==============================================================================
# =================   All the options for the build process    =================
# ==============================================================================

option(BUILD_FORCE_DIRECTORY "The build directory must be different to the source directory." OFF)
option(BUILD_GUI "Build FreeCAD Gui. Otherwise you have only the command line and the Python import module." ON)
option(FREECAD_USE_EXTERNAL_ZIPIOS "Use system installed zipios++ instead of the bundled." OFF)
option(FREECAD_USE_EXTERNAL_SMESH "Use system installed smesh instead of the bundled." OFF)
...

В качестве альтернативы используйте команду cmake-LH для отображения текущей конфигурации и, следовательно, всех переменных, которые можно изменить. Вы также можете установить и использовать cmake-gui для запуска графического интерфейса, отображающего все переменные, которые можно изменить. В следующих разделах мы перечислим некоторые из наиболее важных опций, которые вы, возможно, захотите использовать.

Для Debug сборки

Создайте сборку Debug для устранения неполадок в FreeCAD. Имейте в виду, что при такой сборке Sketcher становится очень медленным при работе со сложными эскизами.

cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Debug ../freecad-source

Для Release сборки

Создайте сборку Release для тестирования кода, который не завершается сбоем. Сборка Release будет выполняться намного быстрее, чем сборка Debug.

cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release ../freecad-source

Сборка на основе Python 3 и Qt5

По умолчанию FreeCAD 0.19 и более ранние версии созданы для Python 2 и Qt4. Поскольку эти два пакета устарели, лучше создавать для Python 3 и Qt5. Поддержка Python 2 и Qt4 была удалена в FreeCAD 0.20, и нет необходимости явно включать Qt5 и Python 3 при компиляции последних версий разработки.

Для 0.20_dev:

cmake ../freecad-source

Обратите внимание, что при переключении между сборками 0.19 и 0.20 может потребоваться удалить CMakeCache.txt до запуска cmake.

Сборка с применением особых версий Python

Если по умолчанию исполняемый файл python в вашей системе является символической ссылкой на Python 2, cmake попытается настроить FreeCAD для этой версии. Вы можете выбрать другую версию Python, указав путь к определенному исполняемому файлу:

cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 ../freecad-source

Если это не сработает, вам, возможно, придется определить дополнительные переменные, указывающие на требуемые библиотеки Python, и включить каталоги:

cmake -DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
    -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m \
    -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
    -DPYTHON_PACKAGES_PATH=/usr/lib/python3.6/site-packages/ \
    ../freecad-source

В одной системе, возможно, имеет несколько независимых версий Python, поэтому расположение и номера версий ваших файлов Python будут зависеть от вашего конкретного дистрибутива Linux. Используйте python3-V для отображения версии Python, которую вы используете в настоящее время; необходимы только первые два числа; например, если результатом является Python 3.6.8, вам необходимо указать каталоги, относящиеся к версии 3.6. Если вы не знаете нужных каталогов, попробуйте выполнить их поиск с помощью команды locate.

locate python3.6

Вы можете использовать python3 -m site в терминале для определения каталога site-packages или dist-packages для систем Debian.

Some components of FreeCAD, such as PySide, try to autodetect the most recent Python version installed on your system, which might fail if it is different from what you entered above. Adding the following cMake option might solve the issue:

-DPython3_FIND_STRATEGY=LOCATION

Сборка в Qt Creator на основе Python 3 и Qt5

1. Запустите Qt Creator.

2. Кликните на Open Project.

3. Перейдите в каталог, в котором находится исходный код, freecad-source/, и выберите самый верхний файл CMakeLists.txt.

4. Выбрав файл, он автоматически запустит cmake на нем, но может выйти из строя, если соответствующие параметры установлены неправильно.

5. Перейдите в Projects → Build & Run → Imported Kit → Build → Build Settings → CMake. Установите соответствующий каталог сборки, freecad-build/.

6. Установите соответствующие переменные в диалоговом окне Key-Value типов String и Bool.

PYTHON_EXECUTABLE=/usr/bin/python3

7. Если переменные загружают проект неправильно, возможно, вам придется перейти к Projects → Manage Kits → Kits → Default (or Imported Kit or similar) → CMake Configuration. Затем нажмите Change, и добавьте соответствующую конфигурацию, как описано выше. Возможно, вам придется добавить дополнительные переменные о путях Python, если системный Python не найден.

PYTHON_EXECUTABLE:STRING=/usr/bin/python3.7
PYTHON_INCLUDE_DIR:STRING=/usr/include/python3.7m
PYTHON_LIBRARY:STRING=/usr/lib/x86_64-linux-gnu/libpython3.7m.so
PYTHON_PACKAGES_PATH:STRING=/usr/lib/python3.7/site-packages

7.1. Нажмите Apply, затем OK.

7.2. Убедитесь, что остальные параметры заданы правильно, например, Qt version должна быть текущей версией, установленной в системе, как Qt 5.9.5 in PATH (qt5).

Нажмите Apply, затем OK, чтобы закрыть конфигурацию.

Программа cmake должна снова запуститься автоматически, и она должна заполнить весь диалог Key-Value всеми переменными, которые можно настроить.

8. Перейдите в Projects → Build & Run → Imported Kit → Run → Run Settings → Run → Run Configuration и выберите FreeCADMain для компиляции графической версии FreeCAD или FreeCADMainCMD для компиляции только версии командной строки.

9. Наконец, перейдите в меню Сборка → Проект сборки "FreeCAD". Если это новая компиляция, она должна занять несколько минут, включительно часов, в зависимости от количества доступных процессоров.

Плагин Qt designer

Если Вы хотите разрабатывать Qt-код для FreeCAD, Вам понадобится плагин к Qt Designer, который обеспечивает все пользовательские виджеты FreeCAD.

Перейдите в дополнительный каталог исходного кода, запустите qmake с указанным файлом проекта для создания Makefile; затем запустите make для компиляции плагина.

cd freecad-source/src/Tools/plugins/widget
qmake plugin.pro
make

Если вы компилируете для Qt5, убедитесь, что двоичный файл qmake предназначен для этой версии, чтобы результирующий Makefile содержал необходимую информацию для Qt5.

cd freecad-source/src/Tools/plugins/widget
$QT_DIR/bin/qmake plugin.pro
make

где $QT_DIR - это каталог, в котором хранятся двоичные библиотеки Qt, например, /usr/lib/x86_64-linux-gnu/qt5.

Созданная библиотека libFreeCAD_widgets.so, которую необходимо скопировать в $QT_DIR/плагины/конструктор.

sudo cp libFreeCAD_widgets.so $QT_DIR/plugins/designer

Внешний или встроенный Pivy

В прошлом, версия Pivy была включена в исходный код FreeCAD (internal). Если вы хотели использовать системную копию Pivy (external), вам нужно было использовать -DFREECAD_USE_EXTERNAL_PIVY=1.

Использование внешнего Pivy стало по умолчанию во время разработки FreeCAD 0.16, поэтому эту опцию больше не нужно устанавливать вручную.

Документирование посредством Doxygen

Если у вас установлен Doxygen, вы можете создать документацию по исходному коду. См. инструкции в source documentation.

Дополнительная документация

Исходный код FreeCAD очень обширен, и с помощью CMake можно настроить множество параметров. Обучение полному использованию CMake может быть полезно для выбора правильных вариантов для ваших особых потребностей.

от Kitware.

(блог), предварительно изучив программирование.

(блог) , предварительно изучив программирование.

Создание пакета debian

Если Вы планируете собрать пакет Debian вне исходников, вам следует сначала установить следующие пакеты:

sudo apt install dh-make devscripts lintian

Перейдите в папку FreeCAD и выполните

debuild

Когда пакет построен, Вы можете использовать lintian для проверки, содержит ли пакет ошибки

lintian freecad-package.deb

*.deb package with checkinstall

The Debian script checkinstall allows to create a *.deb package that can be installed and removed with the standard dpkg commands. It may need to be installed first (on Ubuntu use sudo apt install checkinstall). It's interactive and asks for the required information providing helpful defaults. During the process the package is installed and a *.deb file and a backup archive are created.

It's a good idea to define a name and a short description for the package. The name must be entered to uninstall it again and the desription will be listed by dpkg -l. The default name "build" is not very informative.

Example:

cd freecad-source/build
cmake ..
make
sudo checkinstall                                  # e.g. name=freecad-test1

The result is a *.deb file in the build folder. checkinstall will install the build by default. This is how you can install or uninstall it:

cd freecad-source/build
ls | grep freecad
        freecad-test1_20220814-1_amd64.deb
sudo dpkg -i freecad-test1_20220814-1_amd64.deb   # install
dkpg -l | grep freecad                            # find by name
sudo dpkg -r freecad-test1                        # uninstall by name

Обновление исходного кода

Система CMake позволяет разумно обновлять исходный код и перекомпилировать только то, что изменилось, что ускоряет следующие компиляции.

Перейдите в то место, где исходный код FreeCAD был впервые загружен, и извлеките новый код:

cd freecad-source
git pull

Затем перейдите в каталог сборки, в котором код был скомпилирован изначально, и запустите cmake, указав текущий каталог (denoted by a dot); затем запустите повторную компиляцию с помощью make.

cd ../freecad-build
cmake .
make -j$(nproc --ignore=2)

Uninstalling the source code

In case the compiled source code was installed with sudo make install (for Debian) the files were copied to the /usr/local folder into several subfolders. For uninstallation the file install_manifest.txt can be used. It has been created into the build folder during compilation and contains all installed files. As long as this file exists, the installation can be uninstalled.

cd freecad-source/freecad-build
xargs sudo rm < install_manifest.txt

Разрешение проблем

Примечание для 64-битных систем

При компиляции FreeCAD на 64-бит известна проблема с 64-битным пакетом OpenCASCADE. Чтобы FreeCAD правильно заработал, Вам нужно запустить скрипт configure и установить дополнительно CXXFLAGS:

./configure CXXFLAGS="-D_OCC64"

Для систем на базе Debian эта опция не требуется при использовании готовых пакетов OpenCASCADE, поскольку эти пакеты устанавливают правильно CXXFLAGS внутри.

Скрипты автоматической компиляции

Это всё, что Вам нужно для полной компиляции FreeCAD. Это односкриптовое решение, работающее на свежеустановленном дистрибутиве. Команда запросит пароль root для установки пакетов новых онлайновых репозиториев. Эти скрипты должны запускаться на 32- и 64-битных версиях. Они написаны для разных версий, но, скорее всего, будут работать для позднейший версий с небольшими изменениями или без них.

Если у вас есть такой скрипт для вашего выбранного дистрибутива, пожалуйста, обсудите его на Форум FreeCAD, чтобы мы могли его включить.

Ubuntu

Эти скрипты обеспечивают надёжный путь для установки верного набора зависимостей, требуемых для сборки и запуска FreeCAD в Ubuntu. Они используют репозитории PPA Ubuntu FreeCAD, и должны работать на любой версии Ubuntu, для которой есть целевой PPA. PPA на freecad-daily нацелен на последнюю версию Ubuntu, а 'стабильный' PPA нацелен на официально поддерживаемые версии Ubuntu.

Этот скрипт устанавливает дневной скомпилированный снимок FreeCAD и его зависимостей. Он добавляет дневной репозиторий, получает зависимости для создания этой версии и устанавливает необходимые пакеты. Затем он продолжает извлекать исходный код в определенный каталог, создает каталог сборки и вносит в него изменения, настраивает среду компиляции с помощью cmake и, наконец, создает всю программу с помощью make. Сохраните сценарий в файл, сделайте его исполняемым и запустите его, но не используйте sudo; привилегии суперпользователя будут запрашиваться только для выбранных команд.

#!/bin/sh
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-daily && sudo apt-get update
sudo apt-get build-dep freecad-daily
sudo apt-get install freecad-daily

git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source
mkdir freecad-build
cd freecad-build
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DFREECAD_USE_PYBIND11=ON ../freecad-source
make -j$(nproc --ignore=2)

При желании вы можете удалить предварительно скомпилированную версию FreeCAD (freecad-daily), оставив зависимости на месте, однако, если этот пакет будет установлен, менеджер пакетов также сможет обновлять свои зависимости; это наиболее полезно, если вы намерены следить за развитием FreeCAD, а также постоянно обновлять и компилировать исходные тексты из репозитория Git.

Предыдущий скрипт предполагает, что вы хотите скомпилировать последнюю версию FreeCAD, поэтому вы используете репозиторий "daily" для получения зависимостей. Однако вместо этого вы можете получить зависимости сборки "стабильной" версии для вашего текущего выпуска Ubuntu. Если это так, замените верхнюю часть предыдущего сценария следующими инструкциями. Для Ubuntu 12.04 опустите --enable-source в команде.

#!/bin/sh
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-stable && sudo apt-get update
sudo apt-get build-dep freecad
sudo apt-get install libqt5xmlpatterns5-dev   # Needed for 0.20; should go away on next packaging update 
sudo apt-get install freecad

Как только вы установите пакет freecad из репозитория freecad-stable, он заменит исполняемый файл FreeCAD, доступный из репозитория Ubuntu Universe. Исполняемый файл будет называться просто freecad, а не freecad-stable.

openSUSE

Никаких внешних репозиториев не требуется для компиляции FreeCAD. Однако существует несовместимость с python3-devel, которую необходимо удалить. FreeCAD может быть скомпилирован из GIT

# install needed packages for development
sudo zypper install gcc cmake OpenCASCADE-devel libXerces-c-devel \
python-devel libqt4-devel python-qt4 Coin-devel SoQt-devel boost-devel \
libode-devel libQtWebKit-devel libeigen3-devel gcc-fortran git swig
 
# create new dir, and go into it
mkdir FreeCAD-Compiled 
cd FreeCAD-Compiled
 
# get the source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git free-cad
 
# Now you will have a subfolder in this location called free-cad. It contains the source
 
# make another dir for compilation, and go into it
mkdir FreeCAD-Build1
cd FreeCAD-Build1 
 
# build configuration 
cmake ../free-cad
 
# build FreeCAD
make
 
# test FreeCAD
cd bin
./FreeCAD -t 0

Поскольку вы используете git, в следующий раз, когда захотите скомпилировать, вам не нужно клонировать все подряд просто извлеките из git и скомпилируйте еще раз

# go into free-cad dir created earlier
cd free-cad
 
# pull
git pull
 
# get back to previous dir
cd ..
 
# Now repeat last few steps from before.
 
# make another dir for compilation, and go into it
mkdir FreeCAD-Build2
cd FreeCAD-Build2
 
# build configuration 
cmake ../free-cad
 
# build FreeCAD
# Note: to speed up build use all CPU cores: make -j$(nproc)
make
 
# test FreeCAD
cd bin
./FreeCAD -t 0

Debian Squeeze

# get the needed tools and libs
sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev \
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.5-dev \
libsimage-dev libopencascade-dev \
libsoqt4-dev libode-dev subversion cmake libeigen2-dev python-pivy \
libtool autotools-dev automake gfortran
 
# checkout the latest source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad
 
# go to source dir
cd freecad
 
# build configuration 
cmake .
 
# build FreeCAD
# Note: to speed up build use all CPU cores: make -j$(nproc)
make
 
# test FreeCAD
cd bin
./FreeCAD -t 0

Fedora 27/28/29

Опубликовано пользователем [PrzemoF] на форуме.

#!/bin/bash

ARCH=$(arch)

MAIN_DIR=FreeCAD
BUILD_DIR=build

#FEDORA_VERSION=27
#FEDORA_VERSION=28
FEDORA_VERSION=29

PACKAGES="gcc cmake gcc-c++ boost-devel zlib-devel swig eigen3 qt-devel \
shiboken shiboken-devel pyside-tools python-pyside python-pyside-devel xerces-c \
xerces-c-devel OCE-devel smesh graphviz python-pivy python-matplotlib tbb-devel \
 freeimage-devel Coin3 Coin3-devel med-devel vtk-devel"

FEDORA_29_PACKAGES="boost-python2 boost-python3 boost-python2-devel boost-python3-devel"

if [ "$FEDORA_VERSION" = "29" ]; then
    PACKAGES="$PACKAGES $FEDORA_29_PACKAGES"
fi

echo "Installing packages required to build FreeCAD"
sudo dnf -y install $PACKAGES
cd ~
mkdir $MAIN_DIR || { echo "~/$MAIN_DIR already exist. Quitting.."; exit; }
cd $MAIN_DIR
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git
mkdir $BUILD_DIR || { echo "~/$BUILD_DIR already exist. Quitting.."; exit; }
cd $BUILD_DIR
cmake ../FreeCAD 
make -j$(nproc)

Arch с использованием AUR

Arch User Repository (AUR) - это коллекция пользовательских рецептов для создания пакетов, которые официально не поддерживаются сопровождающими распространения / сообществом. Обычно они в безопасности. Вы можете увидеть, кто поддерживал посылку и как долго он это делал. Рекомендуется проверить общестроительные файлы. Также в этой области доступно программное обеспечение с открытым исходным кодом, даже если оно поддерживается официальной компанией-владельцем.

Обязательное требование : git

Шаги :

  1. Откройте терминал. При необходимости создайте каталог, например. mkdir git. При необходимости измените каталог, например. cd git.
  2. Клонировать репозиторий AUR : git clone http://aur.archlinux.org/packages/freecad-git
  3. Войдите в папку репозитория AUR : cd freecad-git
  4. Компиляция с использованием Arch makepkg : makepkg -s. Флаг -s или --syncdeps также установит необходимые зависимости.
  5. Установите созданный пакет : makepkg --install или дважды щелкните имя файла pkgname-pkgver.pkg.tar.xz в вашем браузере файлов.

Чтобы обновить FreeCAD до последней версии, просто повторите шаг 3. Обновите репозиторий, когда в рецепте произойдет какое-либо изменение или появятся новые функции, используя git checkout-f внутри каталога.