-
-
Notifications
You must be signed in to change notification settings - Fork 808
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support mixed compilation of third-party project code with cmakelists/meson.build through package mode #1714
Comments
这块还没现成的examples,大概三种方式
推荐使用方案3,但是也是理论上可行,我也没这么用过,set_urls 不设置是否能跳过下载(或者设置到本地目录) 我也不记得了,也许要趟坑 或者等后面几天,我有时间的时候,搞个 demo example 供参考,但是要等等。 |
好耶! 另外我在文档里只有一处看到了 我也感觉第三种方案比较漂亮, 我也会先尝试一下的 |
第三种方案 我需要改下代码,目前可能还有点问题 不完全支持,等后面几天好了 |
dev上初步可以了,https://github.com/xmake-io/xmake/tree/dev/tests/projects/c/library_with_cmakelists 这是example 可以直接走包模式,对内置项目的 cmake/meson/scons/autoconf 第三方项目源码进行混合编译集成。 add_rules("mode.debug", "mode.release")
package("foo")
add_deps("cmake")
set_sourcedir(path.join(os.scriptdir(), "foo"))
on_install(function (package)
local configs = {}
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
import("package.tools.cmake").install(package, configs)
end)
on_test(function (package)
assert(package:has_cfuncs("add", {includes = "foo.h"}))
end)
package_end()
add_requires("foo")
target("demo")
set_kind("binary")
add_files("src/main.c")
add_packages("foo") 你先试试,目前我只测试了 macos 下ok,其他平台可以帮忙测试下
|
好,我在Windows和Manjaro测下 |
如果设置了 set_sourcedir 并且没设置 set_urls 和 add_versions ,就是本地混编模式,安装的包,还有缓存什么的都会自动切到 当前项目的 build/.packages 目录下,而不是全局存储。。 当然,自己也可以通过 |
除了 cmake 项目,像 meson/autoconf 项目也都可以走这个模式,只需要换成 具体可以参考 xmake-repo 里面的一些例子 |
现在有一个项目,使用源代码内置的方式引入了几个CMake管理的库,这几个库在XMake-repo里也有,但是此处的源代码是修改过的。
那么我要用XMake打包这个项目的话,最佳实践应该是怎么样的?子包是用XMake还是xrepo还是用CMake管理?有已有的例包可以参考吗?
如图即是所引入的包
The text was updated successfully, but these errors were encountered: