Replies: 1 comment 2 replies
-
cachedir 是会被清的,直接指向过去,有可能过段时间 你就编译链接不过了。。
不过的 configs ,会生成不同的 buildhash 子目录,互不冲突,是可以共用的。。 需要生成不同的 stm32f4xx_hal_conf.h,那就加个 config 一一对应不同的配置项。。 参考相同包的,不同子配置共用,有demo xmake/tests/projects/package/multiconfig/xmake.lua Lines 3 to 4 in b9225ff 通过
尽量不要乱搞,按 xmake 规范走。
加
没必要这么搞,原本就是用 cachedir 保证源码单次下载,多次编译安装不同 configs 集成
只需要配置相对路径,每个 package installdir 就是一个相对独立沙盒环境,不要指向到其他地方,否则容易出问题
可以继承,我这 ok |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
你在什么场景下需要该功能?
在通用平台(如Windows/Linux,x86/arm)下,xmake的包管理还是很舒服的;在非通用平台(cortex-m)下,需要源码引入差异化构建就有点别扭。
一个真实项目情况:
参考xrepo/cross/下的一些package写法,项目相关的package文件如下:
描述可能的解决方案
难处:
package("stm32cube_f4")
默认下载package:cachedir()在~/.xmake/cache下,默认安装package:installdir()在~/.xmake/package下,import("package/tools/xmake.lua").install(package, configs)
在package:cachedir()下执行xmake,生成后的产物(.a/.h)会被copy到package:installdir()下的lib/include;但是对于实际项目里projA/projB共同依赖package("stm32cube_f4"),但其配置文件(stm32f4xx_hal_conf.h)不同,生成的.a不能混用,尽管plat/arch都相同。为了分离不同项目生成的.a,将
add_requireconfs("*", {external = false, configs = {installdir = path.join(os.projectdir(), "build")}})
将installdir调整至各自projX的build目录下,同时buildir也调整至package:installdir()中;因为引入给package的配置文件(stm32f4xx_hal_conf.h)、芯片宏定义与proj强相关,将所有编译的中间产物(.o/.d)和最终产物(.a)都放在projX/build下相对合理。按上面这个做法似乎不太符合xmake的设计理念,
add_requires("stm32cube_f4", {configs ={...}})
中的configs发生改变时,如果installdir内的.a存在,不会发生重编译,所以在package:on_load()阶段都加了一行os.rmdir(package:installdir())
;而且package:cachedir()的路径与年月相关,导致跨月份之后package会重新下载,有点浪费空间。也考虑过在package:on_install()阶段将package:cachedir()里所有内容mv到package:installdir()中,但后续
import("package/tools/xmake.lua").install(package, configs)
的编译就无法执行了,所以做了上述的动作,希望有更好的方法。疑问:
是否有理想情况:源码包引入(无侵入修改),单次下载,多项目(传递配置)复用,在执行构建的项目的buildir下构建生成,include到源码路径,link到buildir下的.a?
因为package希望限制侵入式修改,也减少headerfiles的复制,
package:add("includedirs", "...")
时能直接include在源码路径,但这类接口好像没法识别绝对路径,都会用相对路径来引入?对于headeronly的package("cmsis"),没有port/xmake.lua,被package("stm32cube_f4")依赖(能正常include到cmsis),但主project仅add_requires("stm32cube_f4")的话,无法include到依赖("stm32cube_f4")的依赖("cmsis"),
package:add("includedirs", ...)
的选项好像是没法继承依赖?描述你认为的候选方案
No response
其他信息
PS:xmake的上手真的很简单,比起gn+ninja,都还要上个python脚本才能比得到xmake一个 >_>;
Beta Was this translation helpful? Give feedback.
All reactions