Search code examples
c++static-librariesstatic-linkingqt6

Building Qt from source statically for Visual Studio


I tried hundreds of times to build Qt from source for static linking and read many Stack Overflow questions and neither of them worked for me.

How to get the static library and use it to build apps in Visual Studio either by downloading a pre-built one or building from source? I got overwhelmed by errors.

My Environment

  • Visual Studio 2022 with Qt Tools addons
  • Windows 10 22H2
  • Python 3.11.4
  • Perl
  • Cmake 3.28.0-rc5
  • ninja build 1.11.1

Edit:

I used x64 native tools for visual studio 2022 and changed pwd to Src directory. then executed this command:

.\configure -release -static -opensource -confirm-license -prefix G:\Libraries\C++\Qt\6.6.1\Static-Build

Then I got this error indicating some sort of regex problm:

CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/3rdparty/zlib(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/3rdparty/zlib/CMakeLists.txt:DEFERRED


CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/corelib(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/corelib/CMakeLists.txt:DEFERRED


CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/3rdparty/libpng(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/3rdparty/libpng/CMakeLists.txt:DEFERRED


CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/3rdparty/libjpeg(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/3rdparty/libjpeg/CMakeLists.txt:DEFERRED


CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/3rdparty/freetype(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/3rdparty/freetype/CMakeLists.txt:DEFERRED


CMake Error at qtbase/cmake/QtSyncQtHelpers.cmake:144 (list):
  list sub-command FILTER, mode REGEX failed to compile regex
  "(.+/(ui_)[^/]+\.h|G:/Libraries/C++/Qt/6.6.1/Src/qtbase/src/3rdparty/harfbuzz-ng(/.+)?/doc/+\.h)".
Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:901 (qt_internal_target_sync_headers)
  qtbase/cmake/QtScopeFinalizerHelpers.cmake:24:EVAL:1 (qt_finalize_module)
  qtbase/src/3rdparty/harfbuzz-ng/CMakeLists.txt:DEFERRED

The error is a lot more than this, but it's the same error repeated for other packages I think

Any help with that?


Solution

  • I figured out the cause of this error and fixed it The main cause was because the path to Src directory contained some characters which in my case was (+) from word C++ and that made some regex don't work.