🆓

FreeCADをソースコードからビルドする

2023/06/04に公開

はじめに

公式ドキュメントがあるのでまずここをチェック。
https://wiki.freecad.org/Compile_on_Windows

有志?によるビルド方法動画が公開されている。
https://www.youtube.com/watch?v=s4pHvlDOSZQ

GitHubリポジトリはこちら。
https://github.com/FreeCAD/FreeCAD

環境

  • Windows 11
  • Visual Studio 2022 17.6.0
  • CMake 3.26.3
  • FreeCAD 0.21.0 をビルド対象とする

ビルド手順

まずLibPackをダウンロードする。必要な外部ライブラリはすべてここに入っている。
https://github.com/FreeCAD/FreeCAD-LibPack/releases/tag/2.6

ドキュメントにはLibPackフォルダにPathを通せと書いてあるが、環境変数を汚したくなかったので今回は見送り。

リポジトリをCloneする。
https://github.com/FreeCAD/FreeCAD

CMakeGUIでCloneしたフォルダを開き、ビルド先フォルダを指定。
その後Configure

ダウンロードして解凍したLibPackディレクトリを指定する。

デバッグ実行をしたい場合は以下のオプションもONにする。

インストール先を指定する。

ConfigureGenerateを行う。
VisualStudioのソリューションファイルができるので、OpenProjectで開く。

VisualStudio上でReleaseビルドに切り替え、プロジェクトALL_BUILDを右クリック→プロパティを開く。

FreeCAD 0.20以上をビルドする場合にはC++のバージョンをC++17以上にする必要があるらしい。今回はLatestにした。(特に理由はない)

Ctrl+Shift+Bでビルドを実行する。

しかし、以下のソースでビルドエラーが発生した。

TaskSurfaceFinishSymbols::TaskSurfaceFinishSymbols(TechDraw::DrawViewPart* view) :
    selectedView(view),
    ui(new Ui_TaskSurfaceFinishSymbols)
{
    raValues = {"RA50", "RA25", "RA12, 5", "RA6, 3",
                "RA3, 2", "RA1, 6", "RA0, 8", "RA0, 4",
                "RA0, 2", "RA0, 1", "RA0, 05", "RA0, 025"};
    laySymbols = {"", "=", "⟂", "X", "M", "C", "R"};
    roughGrades = {"", "N1", "N2", "N3", "N4", "N5",
                   "N6", "N7", "N8", "N9", "N10", "N11"};
    ui->setupUi(this);
    setUiEdit();
}
12:46:03:803	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,39): error C3680: ユーザー定義文字列リテラルを、一致しないリテラル サフィックス識別子と連結することはできません
12:46:03:807	111>Generating Resources/translations/Sketcher_be.qm
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,39): message : サフィックス 'X' とサフィックス 'M' を連結しています
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,44): error C3680: ユーザー定義文字列リテラルを、一致しないリテラル サフィックス識別子と連結することはできません
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,44): message : サフィックス 'X' とサフィックス 'C' を連結しています
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,49): error C3680: ユーザー定義文字列リテラルを、一致しないリテラル サフィックス識別子と連結することはできません
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,49): message : サフィックス 'X' とサフィックス 'R' を連結しています
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(89,54): error C2001: 定数が 2 行目に続いています。
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(90,17): error C3688: リテラル サフィックス 'X' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""X' が見つかりません
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(90,5): error C2146: 構文エラー: ')' が、識別子 'roughGrades' の前に必要です。
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(90,19): error C2143: 構文エラー: ';''{' の前にありません。
12:46:03:859	108>C:\Users\funne\Documents\FreeCAD\FreeCAD_src\src\Mod\TechDraw\Gui\TaskSurfaceFinishSymbols.cpp(91,56): error C2143: 構文エラー: ';''}' の前にありません。

特殊文字が原因だとは思うが、根本的な解決方法が分からず、とりあえずTに置き換えたところ、ビルド成功。
解決方法をご存知の方は何卒…

FreeCADMainをスタートアッププロジェクトに設定して実行すれば、FreeCADのGUIが出現する。

GitHubで編集を提案

Discussion