Closed hybcloud closed 1 year ago
shared 版本呢,也不行?
plugin 可以用下面的方式配置 links
一些通用配置能改的,你可以先 pr 过来,比如 platform support
我暂时没 qt 环境,@Leart-Loen @hybcloud 可以先找下,qt sdk 里面有没有 QtPlatform* 字样的其他库
我暂时对 qt6 去掉这个库,可以先试试,我没测过
xmake update -s dev
share版本似乎正常 qt sdk 里面没有其他 QtPlatform* 字样的库了 但是你改的有点过于仓促了😂 大于等于6.0包含在大于等于5.9里面,先判断大于等于5.9然后elseif大于等于6.0就执行不到了😂
改了,再试试,还不行,你也可以直接来个 pr
按照 @hybcloud 的 xmake.lua 搞了一下,Qt 版本 6.4.1 静态编译时指定了 -static-runtime
,然后加上了个 md4c 的依赖(空项目也依赖)。
现在确实可以成功编译了。
以下全文:
add_rules("mode.debug", "mode.release")
includes("qt_add_static_plugins.lua")
target("zuoye_clone")
add_rules("qt.widgetapp_static")
add_headerfiles("src/*.h")
add_files("src/*.cpp")
add_files("src/mainwindow.ui")
add_files("src/pics.qrc")
-- add files with Q_OBJECT meta (only for qt.moc)
add_files("src/datawidget.h")
add_files("src/mainwindow.h")
add_files({
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/Widgets_resources_1/.rcc/qrc_qstyle.cpp.obj",
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/Widgets_resources_2/.rcc/qrc_qstyle1.cpp.obj",
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/Widgets_resources_3/.rcc/qrc_qmessagebox.cpp.obj",
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/QWindowsIntegrationPlugin_resources_1/.rcc/qrc_openglblacklists.cpp.obj",
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/QWindowsIntegrationPlugin_resources_2/.rcc/qrc_cursors.cpp.obj",
"PATH/TO/Qt/6.4.1/static/lib/objects-Release/Gui_resources_1/.rcc/qrc_qpdf.cpp.obj"
})
add_links(
"PATH/TO/Qt/6.4.1/static/plugins/styles/qwindowsvistastyle",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qgif",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qicns",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qico",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qjpeg",
"PATH/TO/Qt/6.4.1/static/plugins/iconengines/qsvgicon",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qsvg",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qtga",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qtiff",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qwbmp",
"PATH/TO/Qt/6.4.1/static/plugins/imageformats/qwebp",
"PATH/TO/Qt/6.4.1/static/plugins/platforms/qwindows",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledLibjpeg",
"PATH/TO/Qt/6.4.1/static/lib/Qt6Svg",
"uxtheme",
"dwmapi",
"imm32",
"oleaut32",
"shlwapi",
"winspool",
"wtsapi32",
"shcore",
"comdlg32",
"d3d9",
"PATH/TO/Qt/6.4.1/static/lib/Qt6OpenGL",
"d3d11",
"dxgi",
"dxguid",
"gdi32",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledHarfbuzz",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledFreetype",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledLibpng",
"d2d1",
"dwrite",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledZLIB",
"synchronization",
"mpr",
"userenv",
"advapi32",
"authz",
"kernel32",
"netapi32",
"ole32",
"user32",
"uuid",
"version",
"winmm",
"ws2_32",
"runtimeobject",
"PATH/TO/Qt/6.4.1/static/lib/Qt6BundledPcre2",
"PATH/TO/Qt/6.4.1/static/lib/Qt6EntryPoint",
"shell32",
"kernel32",
"user32",
"gdi32",
"winspool",
"shell32",
"ole32",
"oleaut32",
"uuid",
"comdlg32",
"advapi32",
"PATH/TO/MD4C/lib/md4c",
"PATH/TO/MD4C/lib/md4c-html"
)
-- add plugin: QSvgPlugin (optional)
add_frameworks("QtSvg","QtSql")
qt_add_static_plugins("QSvgPlugin", {linkdirs = "plugins/imageformats", links = {"qsvg"}})
还有就是想请教一下,之前编译的Qt static 我没有指定 -static-runtime
,所以在 xmake.lua 里设置了 set_runtimes("MD")
,但实际上编译的时候会提示 moc_mainwindow.cpp.obj (应该是这个文件):-1: error: LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(main.cpp.obj 中)
。
后来我又加上 -static-runtime
编译了一遍 Qt 就没问题了。
不知道是不是个bug。
你的 qt sdk 是 MT 的,那就只能用 MT 。。得对上,跟 bug 无关
Xmake 版本
xmake v2.7.1+master.5c0e53f91
操作系统版本和架构
windows11 21H2 (22000.856)
描述问题
我用的版本是Qt6.3.1,静态编译的配置选择ZLIB这些库都用Qt内置版本,用xmake内建模板创建widgetapp工程,规则改为静态规则,无法正常构建。
期待的结果
更新静态编译规则,或者作者大大稍微指点一下,我来实现、调试、提PR
工程配置
xmake内建的模板已经不能正常工作了。 基于QtCreator的CMake输出的makefile,我改了xmake.lua文件,新文件长这样:
另外,我在![image](https://user-images.githubusercontent.com/43987901/188850796-5fd0cd5b-8285-4d8c-ab50-e8527417a1a1.png)
C:\Program Files\xmake\rules\qt\xmake.lua
做了如下改动:此时能够正常进行6.3.1的静态编译
附加信息和错误日志
No response