From ce65d3bdeb6f4a450a0a6e0d1a51e54daccd69c8 Mon Sep 17 00:00:00 2001 From: RC1844 <1844766234@qq.com> Date: Sat, 10 Jan 2026 23:57:32 +0800 Subject: fix:qt mkspecsdir Fix the qt mkspecsdir path --- xmake/modules/detect/sdks/find_qt.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua index 8935be2c6..c47fc3f69 100644 --- a/xmake/modules/detect/sdks/find_qt.lua +++ b/xmake/modules/detect/sdks/find_qt.lua @@ -286,7 +286,7 @@ function _find_qt(sdkdir, sdkver, sdkdir_host) local libdir = qtenvs.QT_INSTALL_LIBS local pluginsdir = qtenvs.QT_INSTALL_PLUGINS local includedir = qtenvs.QT_INSTALL_HEADERS - local mkspecsdir = qtenvs.QMAKE_MKSPECS or path.join(qtenvs.QT_INSTALL_ARCHDATA, "mkspecs") + local mkspecsdir = qtenvs.QMAKE_MKSPECS or path.join(qtenvs.QT_HOST_DATA, "mkspecs") -- for 6.2 local bindir_host = qtenvs.QT_HOST_BINS if not bindir_host and libexecdir and is_plat("android", "iphoneos") then -- cgit v1.3.1 From 98b400ca2ed607695b65905044446c3946489fe5 Mon Sep 17 00:00:00 2001 From: ruanc <1844766234@qq.com> Date: Sun, 11 Jan 2026 00:15:21 +0800 Subject: feat(qt): support dynamic mkspec selection for Qt SDK - Add mkspec variable to store QMAKE_XSPEC or QMAKE_SPEC from Qt environment - Include mkspec in the returned Qt SDK information table - Use dynamic mkspec path instead of hardcoded platform-specific paths - Remove hardcoded mkspec directory paths for macosx, linux, windows, android and wasm platforms - Add include directories using the dynamic mkspec path for proper Qt compilation --- xmake/modules/detect/sdks/find_qt.lua | 3 ++- xmake/rules/qt/load.lua | 7 +------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua index c47fc3f69..e0aa3b03d 100644 --- a/xmake/modules/detect/sdks/find_qt.lua +++ b/xmake/modules/detect/sdks/find_qt.lua @@ -287,6 +287,7 @@ function _find_qt(sdkdir, sdkver, sdkdir_host) local pluginsdir = qtenvs.QT_INSTALL_PLUGINS local includedir = qtenvs.QT_INSTALL_HEADERS local mkspecsdir = qtenvs.QMAKE_MKSPECS or path.join(qtenvs.QT_HOST_DATA, "mkspecs") + local mkspec = qtenvs.QMAKE_XSPEC or qtenvs.QMAKE_SPEC -- for 6.2 local bindir_host = qtenvs.QT_HOST_BINS if not bindir_host and libexecdir and is_plat("android", "iphoneos") then @@ -316,7 +317,7 @@ function _find_qt(sdkdir, sdkver, sdkdir_host) end end - return {sdkdir = sdkdir, bindir = bindir, bindir_host = bindir_host, libexecdir = libexecdir, libexecdir_host = libexecdir_host, libdir = libdir, includedir = includedir, qmldir = qmldir, pluginsdir = pluginsdir, mkspecsdir = mkspecsdir, sdkver = sdkver} + return {sdkdir = sdkdir, bindir = bindir, bindir_host = bindir_host, libexecdir = libexecdir, libexecdir_host = libexecdir_host, libdir = libdir, includedir = includedir, qmldir = qmldir, pluginsdir = pluginsdir, mkspecsdir = mkspecsdir, mkspec = mkspec, sdkver = sdkver} end -- find qt sdk toolchains diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 9fc204174..53b5a1ba2 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -414,6 +414,7 @@ function main(target, opt) end -- add includedirs, linkdirs + _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec)) if target:is_plat("macosx") then target:add("frameworks", "DiskArbitration", "IOKit", "CoreFoundation", "CoreGraphics", "OpenGL") target:add("frameworks", "Carbon", "Foundation", "AppKit", "Security", "SystemConfiguration") @@ -434,18 +435,15 @@ function main(target, opt) target:set("frameworks", frameworks) end _add_includedirs(target, qt.includedir) - _add_includedirs(target, path.join(qt.mkspecsdir, "macx-clang")) target:add("linkdirs", qt.libdir) elseif target:is_plat("linux") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) - _add_includedirs(target, path.join(qt.mkspecsdir, "linux-g++")) target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) elseif target:is_plat("windows") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) - _add_includedirs(target, path.join(qt.mkspecsdir, "win32-msvc")) target:add("linkdirs", qt.libdir) target:add("syslinks", "ws2_32", "gdi32", "ole32", "advapi32", "shell32", "user32", "opengl32", "imm32", "winmm", "iphlpapi") -- for debugger, https://github.com/xmake-io/xmake-vscode/issues/225 @@ -469,19 +467,16 @@ function main(target, opt) else _add_includedirs(target, qt.includedir) end - _add_includedirs(target, path.join(qt.mkspecsdir, "win32-g++")) target:add("linkdirs", qt.libdir) target:add("syslinks", "mingw32", "ws2_32", "gdi32", "ole32", "advapi32", "shell32", "user32", "iphlpapi") elseif target:is_plat("android") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) - _add_includedirs(target, path.join(qt.mkspecsdir, "android-clang")) target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) elseif target:is_plat("wasm") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) - _add_includedirs(target, path.join(qt.mkspecsdir, "wasm-emscripten")) target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) -- add prebuilt object files in qt sdk. -- cgit v1.3.1 From 9ba7ce6c2221beaeac76b66959cd990918934ff0 Mon Sep 17 00:00:00 2001 From: ruanc <1844766234@qq.com> Date: Sun, 11 Jan 2026 12:54:50 +0800 Subject: feat(qt): add fallback mkspec support for different platforms - Introduce fallbackmkspec variable to handle mkspec selection - Set platform-specific fallback mkspec values: - macosx: macx-clang - linux: linux-g++ - windows: win32-msvc - mingw: win32-g++ - android: android-clang - wasm: wasm-emscripten - Implement conditional logic to use qt.mkspec when available, otherwise fall back to platform-specific mkspec - Maintain backward compatibility with existing mkspec usage --- xmake/rules/qt/load.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 53b5a1ba2..252e6db5b 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -414,7 +414,7 @@ function main(target, opt) end -- add includedirs, linkdirs - _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec)) + local fallbackmkspec = "" if target:is_plat("macosx") then target:add("frameworks", "DiskArbitration", "IOKit", "CoreFoundation", "CoreGraphics", "OpenGL") target:add("frameworks", "Carbon", "Foundation", "AppKit", "Security", "SystemConfiguration") @@ -435,15 +435,18 @@ function main(target, opt) target:set("frameworks", frameworks) end _add_includedirs(target, qt.includedir) + fallbackmkspec = "macx-clang" target:add("linkdirs", qt.libdir) elseif target:is_plat("linux") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) + fallbackmkspec = "linux-g++" target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) elseif target:is_plat("windows") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) + fallbackmkspec = "win32-msvc" target:add("linkdirs", qt.libdir) target:add("syslinks", "ws2_32", "gdi32", "ole32", "advapi32", "shell32", "user32", "opengl32", "imm32", "winmm", "iphlpapi") -- for debugger, https://github.com/xmake-io/xmake-vscode/issues/225 @@ -467,16 +470,19 @@ function main(target, opt) else _add_includedirs(target, qt.includedir) end + fallbackmkspec = "win32-g++" target:add("linkdirs", qt.libdir) target:add("syslinks", "mingw32", "ws2_32", "gdi32", "ole32", "advapi32", "shell32", "user32", "iphlpapi") elseif target:is_plat("android") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) + fallbackmkspec = "android-clang" target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) elseif target:is_plat("wasm") then target:set("frameworks", nil) _add_includedirs(target, qt.includedir) + fallbackmkspec = "wasm-emscripten" target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) -- add prebuilt object files in qt sdk. @@ -510,6 +516,11 @@ function main(target, opt) target:add("shflags", "-s EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]") end end + if qt.mkspec then + _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec)) + else + _add_includedirs(target, path.join(qt.mkspecsdir, fallbackmkspec)) + end -- is gui application? if opt.gui then -- cgit v1.3.1 From 303d4349268ea98f4ec331570fa43987f8001800 Mon Sep 17 00:00:00 2001 From: ruanc <1844766234@qq.com> Date: Sun, 11 Jan 2026 21:49:08 +0800 Subject: refactor(qt): simplify mkspec includedirs logic Replace conditional statement with ternary operator for adding includedirs from qt.mkspecsdir. The logic remains the same but the code is more concise using 'qt.mkspec or fallbackmkspec' instead of explicit if-else condition. --- xmake/rules/qt/load.lua | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 252e6db5b..1ce0f4fb1 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -516,11 +516,7 @@ function main(target, opt) target:add("shflags", "-s EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]") end end - if qt.mkspec then - _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec)) - else - _add_includedirs(target, path.join(qt.mkspecsdir, fallbackmkspec)) - end + _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec or fallbackmkspec)) -- is gui application? if opt.gui then -- cgit v1.3.1