summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruanc <[email protected]>2026-01-11 00:15:21 +0800
committerruanc <[email protected]>2026-01-11 00:15:21 +0800
commit98b400ca2ed607695b65905044446c3946489fe5 (patch)
treef6726e0194ea4cb51c304dc6207b275b92d30783
parentce65d3bdeb6f4a450a0a6e0d1a51e54daccd69c8 (diff)
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
-rw-r--r--xmake/modules/detect/sdks/find_qt.lua3
-rw-r--r--xmake/rules/qt/load.lua7
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.