Closed AKanTam closed 1 month ago
Bot detected the issue body's language is not English, translate it automatically.
Title: Setting the qt path through set_config within the if judgment is invalid
set_config 等价于 xmake f --xx 的设置,优先于 配置参数解析,而 is_arch 对标 xmake f --arch,要先解析完配置,才能获取值。当然没法生效了。set_config 只能在最顶层使用
Bot detected the issue body's language is not English, translate it automatically.
set_config is equivalent to the setting of xmake f --xx, which takes precedence over configuration parameter parsing, while is_arch is based on xmake f --arch, and the configuration must be parsed before the value can be obtained. Of course it won't take effect. set_config can only be used at the top level
Xmake 版本
xmake v2.9.4+HEAD.e85b001f1
操作系统版本和架构
Windows 10 22H2
描述问题
我使用xmake进行qt的交叉编译,其中需要根据配置的架构选择不同的编译器(arm32/arm64)以及不同的qt,但是在实际使用中发现set_config函数在全局中使用是可以正确设置qt的,但在if is_arch("xxx") then内设置就无效,哪怕在set_config之后立马打印get_config也是空的
期待的结果
希望能够通过如下所示方式根据不同的架构设置不同的qt路径
工程配置
add_rules("mode.debug", "mode.release")
-- set toolchain toolchain("arm64") set_kind("standalone") set_sdkdir("D:/Code/arm32/arm-gnu-toolchain-11.3.rel1-mingw-w64-i686-aarch64-none-linux-gnu") toolchain_end() toolchain("arm32") set_kind("standalone") set_sdkdir("D:/Code/arm32/gcc-arm-9.2-2019.12-mingw-w64-i686-arm-none-linux-gnueabihf") toolchain_end()
if is_arch("arm64-v8a") then set_targetdir("binarm64") set_toolchains("arm64") set_config("qt","D:/Softwares/Qt5.15.14-ARMv8") elseif is_arch("armv7","armv7s") then set_targetdir("binarm32") set_toolchains("arm32") set_config("qt","D:/Softwares/Qt5.15.14-ARMv7") elseif is_arch("x86","x64","x86_64") then set_targetdir("bin") set_plat("mingw") set_toolchains("mingw") end
target("widget") add_rules("qt.widgetapp")
附加信息和错误日志
PS D:\Code\qt\xmake\qtwidget> xmake -vD plat: linux arch: armv7
mode: release toolchain:
[ 85%]: linking.release widget D:\Code\arm32\gcc-arm-9.2-2019.12-mingw-w64-i686-arm-none-linux-gnueabihf\bin\arm-none-linux-gnueabihf-g++ -o binarm32\widget build.objs\widget\linux\armv7\release\src\main.cpp.o build.objs\widget\linux\armv7\release\src\mainwindow.cpp.o build.objs\widget\linux\armv7\release\gens\src\moc_mainwindow.cpp.o -LC:\Qt\6.7.0\mingw_64\lib -Wl,-rpath=C:\Qt\6.7.0\mingw_64\lib -s -lQt6Gui -lQt6Widgets -lQt6Core d:/code/arm32/gcc-arm-9.2-2019.12-mingw-w64-i686-arm-none-linux-gnueabihf/bin/../lib/gcc/arm-none-linux-gnueabihf/9.2.1/../../../../arm-none-linux-gnueabihf/bin/ld.exe: C:\Qt\6.7.0\mingw_64\lib\libQt6Widgets.a: error adding symbols: file format not recognized
collect2.exe: error: ld returned 1 exit status error: @programdir\core\main.lua:329: @programdir\actions\build\main.lua:148: @programdir\modules\async\runjobs.lua:325: @programdir\actions\build\kinds\binary.lua:53: @programdir\core\sandbox\modules\os.lua:378: execv(D:\Code\arm32\gcc-arm-9.2-2019.12-mingw-w64-i686-arm-none-linux-gnueabihf\bin\arm-none-linux-gnueabihf-g++ -o binarm32\widget build.objs\widget\linux\armv7\release\src\main.cpp.o build.objs\widget\linux\armv7\release\src\mainwindow.cpp.o build.objs\widget\linux\armv7\release\gens\src\moc_mainwindow.cpp.o -LC:\Qt\6.7.0\mingw_64\lib -Wl,-rpath=C:\Qt\6.7.0\mingw_64\lib -s -lQt6Gui -lQt6Widgets -lQt6Core) failed(1) stack traceback: [C]: in function 'error' [@programdir\core\base\os.lua:973]: [@programdir\core\sandbox\modules\os.lua:378]: in function 'execv' [@programdir\modules\core\tools\gcc.lua:583]: [C]: in function 'xpcall' [@programdir\core\base\utils.lua:275]: [@programdir\core\tool\linker.lua:222]: in function 'link' [@programdir\actions\build\kinds\binary.lua:53]: in function 'callback' [@programdir\modules\core\project\depend.lua:217]: in function 'on_changed' [@programdir\actions\build\kinds\binary.lua:41]: in function '_do_link_target' [@programdir\actions\build\kinds\binary.lua:83]: [@programdir\actions\build\kinds\binary.lua:110]: in function '_link_target' [@programdir\actions\build\kinds\binary.lua:138]: in function 'jobfunc' [@programdir\modules\async\runjobs.lua:241]: [C]: in function 'xpcall' [@programdir\core\base\utils.lua:275]: in function 'trycall' [@programdir\core\sandbox\modules\try.lua:117]: in function 'try' [@programdir\modules\async\runjobs.lua:223]: in function 'cotask' [@programdir\core\base\scheduler.lua:406]:
stack traceback: [C]: in function 'error' @programdir\core\base\os.lua:973: in function 'os.raiselevel' (...tail calls...) @programdir\core\main.lua:329: in upvalue 'cotask' @programdir\core\base\scheduler.lua:406: in function <@programdir\core\base\scheduler.lua:399>