跳转到内容

utils.platform

此模块用于一些平台相关的辅助操作接口

utils.platform.gnu2mslib

  • 将 mingw 的 libxxxdll.a 转换成 msvc 的 xxx.lib 库

这个功能对 Fortran & C++ 混合项目特别有帮助,因为 VS 不提供fortran编译器,只能用MinGW的gfortran来编译fortran部分,然后和VS的项目链接。 往往这样的项目同时有一些其他的库以vs格式提供,因此纯用MinGW编译也不行,只能使用这个功能来混合编译。

而 cmake 也有个类似的 GNUtoMS

相关 issues 见:#1181

lua
import("utils.platform.gnu2mslib")

gnu2mslib("xxx.lib", "xxx.dll.a")
gnu2mslib("xxx.lib", "xxx.def")
gnu2mslib("xxx.lib", "xxx.dll.a", {dllname = "xxx.dll", arch = "x64"})

支持从 def 生成 xxx.lib ,也支持从 xxx.dll.a 自动导出 .def ,然后再生成 xxx.lib

如果不想自动从dll.a生成 def,想借用 gnu linker 生成的 def,那就自己通过 add_shflags("-Wl,--output-def,xxx.def") 配置,生成 def,然后传入 def 到这个接口。。

{dllname = xxx, arch = "xxx"} 这些是可选的,根据自己的需求而定。。

也可以直接 xmake l utils.platform.gnu2mslib xxx.lib xxx.dll.a 快速测试验证