From e7950146e3f157909f1bf74f7ab742f0d445503a Mon Sep 17 00:00:00 2001 From: xiaobfly Date: Mon, 29 Jul 2024 10:08:14 +0800 Subject: fix: not append .lib when link .obj file. for example: static qt will link these files: $$[QT_INSTALL_PREFIX]/lib/objects-Debug/Widgets_resources_1/.rcc/qrc_qstyle.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-Debug/Widgets_resources_2/.rcc/qrc_qstyle1.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-Debug/Widgets_resources_3/.rcc/qrc_qmessagebox.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-Debug/Gui_resources_1/.rcc/qrc_qpdf.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-Debug/Gui_resources_2/.rcc/qrc_gui_shaders.cpp.obj have a link error: error: LINK fatal error LNK1104: can't open file "$$[QT_INSTALLPREFIX]\Lib\objects-Debug\widgets_resources1\.rcc\qrc_qstyle.cpp.obj.lib" --- xmake/modules/core/tools/link.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/modules/core/tools/link.lua b/xmake/modules/core/tools/link.lua index a144d515e..3e51ad40a 100644 --- a/xmake/modules/core/tools/link.lua +++ b/xmake/modules/core/tools/link.lua @@ -102,7 +102,7 @@ end -- make the link flag function nf_link(self, lib) - if not lib:endswith(".lib") then + if not lib:endswith(".lib") and not lib:endswith(".obj") then lib = lib .. ".lib" end return lib -- cgit v1.3.1 From 0936bb1cd2d90cbfe936efaaaa0daf712e12728f Mon Sep 17 00:00:00 2001 From: xiaobfly Date: Mon, 29 Jul 2024 10:40:24 +0800 Subject: fix static qt link macro. for example: before: $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/PrintSupport_resources_1/.rcc/qrc_qprintdialog.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/PrintSupport_resources_2/.rcc/qrc_qprintdialog1.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/Widgets_resources_1/.rcc/qrc_qstyle.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/Widgets_resources_2/.rcc/qrc_qstyle1.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/Widgets_resources_3/.rcc/qrc_qmessagebox.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/Gui_resources_1/.rcc/qrc_qpdf.cpp.obj $$[QT_INSTALL_PREFIX]/lib/objects-RelWithDebInfo/Gui_resources_2/.rcc/qrc_gui_shaders.cpp.obj after: "D:/Qt/Qt6.5.3/lib/objects-Debug/Widgets_resources_1/.rcc/qrc_qstyle.cpp.obj", "D:/Qt/Qt6.5.3/lib/objects-Debug/Widgets_resources_2/.rcc/qrc_qstyle1.cpp.obj", "D:/Qt/Qt6.5.3/lib/objects-Debug/Widgets_resources_3/.rcc/qrc_qmessagebox.cpp.obj", "D:/Qt/Qt6.5.3/lib/objects-Debug/Gui_resources_1/.rcc/qrc_qpdf.cpp.obj", "D:/Qt/Qt6.5.3/lib/objects-Debug/Gui_resources_2/.rcc/qrc_gui_shaders.cpp.obj", --- xmake/rules/qt/load.lua | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 82bc25fbb..c9269b0b6 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -139,7 +139,7 @@ function _get_frameworks_from_target(target) return table.unique(values) end -function _add_qmakeprllibs(target, prlfile, qtlibdir) +function _add_qmakeprllibs(target, prlfile, qt) if os.isfile(prlfile) then local contents = io.readfile(prlfile) local envs = {} @@ -157,11 +157,22 @@ function _add_qmakeprllibs(target, prlfile, qtlibdir) local libdir = lib:sub(3) target:add("linkdirs", libdir) else - local libstr = string.gsub(lib, "%$%$%[QT_INSTALL_LIBS%]", qtlibdir) - if libstr:startswith("-l") then - libstr = libstr:sub(3) + if qt.qmldir then + lib = string.gsub(lib, "%$%$%[QT_INSTALL_QML%]", qt.qmldir) end - target:add("syslinks", libstr) + if qt.sdkdir then + lib = string.gsub(lib, "%$%$%[QT_INSTALL_PREFIX%]", qt.sdkdir) + end + if qt.pluginsdir then + lib = string.gsub(lib, "%$%$%[QT_INSTALL_PLUGINS%]", qt.pluginsdir) + end + if qt.libdir then + lib = string.gsub(lib, "%$%$%[QT_INSTALL_LIBS%]", qt.libdir) + end + if lib:startswith("-l") then + lib = lib:sub(3) + end + target:add("syslinks", lib) end end end @@ -295,7 +306,7 @@ function main(target, opt) for _, qt_link in ipairs(target:values("qt.links")) do for _, qt_libdir in ipairs(qtprldirs) do local prl_file = path.join(qt_libdir, qt_link .. ".prl") - _add_qmakeprllibs(target, prl_file, qt.libdir) + _add_qmakeprllibs(target, prl_file, qt) end end @@ -354,7 +365,7 @@ function main(target, opt) else local link = _link(target, qt.libdir, framework, qt_sdkver, infix) target:add("syslinks", link) - _add_qmakeprllibs(target, path.join(qt.libdir, link .. ".prl"), qt.libdir) + _add_qmakeprllibs(target, path.join(qt.libdir, link .. ".prl"), qt) _add_includedirs(target, path.join(qt.includedir, framework)) -- e.g. QtGui/5.15.0/QtGui/qpa/qplatformopenglcontext.h _add_includedirs(target, path.join(qt.includedir, framework, qt.sdkver)) @@ -363,7 +374,7 @@ function main(target, opt) else local link = _link(target, qt.libdir, framework, qt_sdkver, infix) target:add("syslinks", link) - _add_qmakeprllibs(target, path.join(qt.libdir, link .. ".prl"), qt.libdir) + _add_qmakeprllibs(target, path.join(qt.libdir, link .. ".prl"), qt) _add_includedirs(target, path.join(qt.includedir, framework)) _add_includedirs(target, path.join(qt.includedir, framework, qt.sdkver)) _add_includedirs(target, path.join(qt.includedir, framework, qt.sdkver, framework)) -- cgit v1.3.1