-
-
Notifications
You must be signed in to change notification settings - Fork 812
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 SWIG #1622
Comments
先排着吧,后面看具体时间排期~ |
也可以参考这个 先自己搞下,完全类似的 https://github.com/xmake-io/xmake/blob/master/xmake/rules/lex_yacc/yacc/xmake.lua 再额外加个 after_install 就差不多了。 |
初步支持了,见:#1622 python cadd_rules("mode.release", "mode.debug")
add_requires("python 3.x")
target("example")
add_rules("swig.c", {moduletype = "python"})
add_files("src/example.i", {scriptdir = "share"})
add_files("src/example.c")
add_packages("python") python c++add_rules("mode.release", "mode.debug")
add_requires("python 3.x")
target("example")
add_rules("swig.cpp", {moduletype = "python"})
add_files("src/example.i", {scriptdir = "share"})
add_files("src/example.cpp")
add_packages("python") moduletype 用于指定模块类型,比如:python, perl5, tcl 对应 后面的 scriptdir 参数是可选的,如果设置了,那么语言特定脚本,比如 example.py 文件在 如果不设置 scriptdir,那么默认不会安装 example.py ,需要用户自己定义 on_install/after_install 去安装它们。 add_rules("mode.release", "mode.debug")
add_requires("python 3.x")
target("example")
add_rules("swig.cpp", {moduletype = "python"})
add_files("src/example.i")
add_files("src/example.cpp")
add_packages("python")
after_install(function (target)
local scriptfiles = target:data("swig.scriptfiles")
for _, scriptfile in ipairs(scriptfiles) do
-- os.cp(...)
end
end) 另外,tests/projects/swig 目录下有所有例子工程,但是目前只有 python 的,其他perl5/tcl 的暂时没加,因为 xmake-repo 里面还没收录相关包,等后面有时间再说吧,或者你这也可以帮忙补下对应的包。 |
提示找不到swig
|
我是mac下测试的走brew安装的swig 没--version参数 所以走了-help测试,你可以改进下 find_swig.lua |
swig的参数只有单横线,-version,没有--version |
刚改了下,再试试 |
现在可以找到swig了;但是找不到的时候,即使没加参数 |
另外windows下动态库的命名必须加下划线,所以输出的动态链接库应该是 |
根据文档,linux下生成的是 |
就 linux 下需要?没 lib 前缀么? |
所有系统都需要,没有lib前缀 |
mac 也是?win 呢? |
我改了,再试试 |
这个问题还是没解决 |
我没遇到 sandisk:python_c ruki$ xmake
error: swig not found! |
我这边测试只有windows上有这个问题,linux上正常 |
我 dev 上稍微改了下,之前有些设计的不对, 因为一个target 只能构建一个同类型模块,还要根据 moduletype 来调整这个模块的 文件名,粒度到 files 就不好控制了 比如 python 模块,是 _example.so/_example.pyd 但是对于 lua 模块,应该是 example.so 其他模块的命名都不一定相同,只能全局配置 moduletype 来控制 add_rules("mode.release", "mode.debug")
add_requires("python 3.x")
target("example")
add_rules("swig.cpp", {moduletype = "python"})
add_files("src/example.i", {scriptdir = "share"})
add_files("src/example.cpp")
add_packages("python") Lua + chttps://github.com/xmake-io/xmake/tree/dev/tests/projects/swig/lua_c 另外,我额外加了 lua 模块的支持和 test 例子 add_rules("mode.release", "mode.debug")
add_requires("lua")
target("example")
add_rules("swig.c", {moduletype = "lua"})
add_files("src/example.i", {swigflags = "-no-old-metatable-bindings"})
add_files("src/example.c")
add_packages("lua") 并且新增了 而且之前仅仅处理支持python模块,很多逻辑不够通用,没法适配其他模块,另外我修复了一些其他的小问题 |
还有 macOS 上 python 模块命名是 _example.so 还是 _example.dylib? 我需要确认下,目前设置了是 _example.dylib |
我试了一下把我这边一个用swig绑定raylib的工程修改了一下,用上了这个新特性:(Rinkaa/swigraylib@6e8cdb2 ): 但是遇到了点问题,xmake编译时最后把
更改后产生的指令:
虽然xmake.lua里 |
这个是因为你的target 没有add_files任何c/c++文件,所以xmake没探测到语言类型导致。 你可以先add_files一个空 .c 文件进去就好了 回头我再改进下 |
刚改进了下,更新到 dev 再试试 |
现在可以了,感谢处理👍
|
你在什么场景下需要该功能?
http://www.swig.org/Doc4.0/SWIGDocumentation.html#Introduction_nn4
支持使用SWIG生成各语言接口module
描述可能的解决方案
其中运行
swig -c++ -python foo_export.i
生成的foo_export.cpp
自动加入sourcefile中,整个library在linux上生成.so文件,在windows上生成.pyd文件(本质是.dll文件,改后缀名为pyd以便python识别),生成的foo_export.py可以让用户在on_install
或after_install
中获取并进行copy、rename等操作其他信息
一些使用cmake+swig的文档/实例
https://cmake.org/cmake/help/latest/module/UseSWIG.html
https://github.com/Mizux/cmake-swig
The text was updated successfully, but these errors were encountered: