summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-12 11:19:23 +0800
committerGitHub <[email protected]>2026-01-12 11:19:23 +0800
commit0bb0eca7e93dbdc1390fee4a7bcf30c7cf834a66 (patch)
tree7a7d0528d90066796cd3b39c0890d3e7c7a51187
parentd1f4de4fe9450980b7098f3aa2598ba7e964aaf5 (diff)
parent303d4349268ea98f4ec331570fa43987f8001800 (diff)
Merge pull request #7208 from RC1844/patch-4
support dynamic mkspec selection for Qt SDK
-rw-r--r--xmake/modules/detect/sdks/find_qt.lua5
-rw-r--r--xmake/rules/qt/load.lua14
2 files changed, 11 insertions, 8 deletions
diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua
index 8935be2c6..e0aa3b03d 100644
--- a/xmake/modules/detect/sdks/find_qt.lua
+++ b/xmake/modules/detect/sdks/find_qt.lua
@@ -286,7 +286,8 @@ 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")
+ 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..1ce0f4fb1 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
+ local fallbackmkspec = ""
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,18 @@ function main(target, opt)
target:set("frameworks", frameworks)
end
_add_includedirs(target, qt.includedir)
- _add_includedirs(target, path.join(qt.mkspecsdir, "macx-clang"))
+ fallbackmkspec = "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++"))
+ 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)
- _add_includedirs(target, path.join(qt.mkspecsdir, "win32-msvc"))
+ 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
@@ -469,19 +470,19 @@ function main(target, opt)
else
_add_includedirs(target, qt.includedir)
end
- _add_includedirs(target, path.join(qt.mkspecsdir, "win32-g++"))
+ 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)
- _add_includedirs(target, path.join(qt.mkspecsdir, "android-clang"))
+ 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)
- _add_includedirs(target, path.join(qt.mkspecsdir, "wasm-emscripten"))
+ fallbackmkspec = "wasm-emscripten"
target:add("rpathdirs", qt.libdir)
target:add("linkdirs", qt.libdir)
-- add prebuilt object files in qt sdk.
@@ -515,6 +516,7 @@ function main(target, opt)
target:add("shflags", "-s EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]")
end
end
+ _add_includedirs(target, path.join(qt.mkspecsdir, qt.mkspec or fallbackmkspec))
-- is gui application?
if opt.gui then