# utils.platform 此模块用于一些平台相关的辅助操作接口 ## utils.platform.gnu2mslib - 将 mingw 的 libxxxdll.a 转换成 msvc 的 xxx.lib 库 #### 函数原型 ::: tip API ```lua gnu2mslib(outputlib: , inputfile: , options: ) ``` ::: #### 参数说明 | 参数 | 描述 | |------|------| | outputlib | 必需。输出的 .lib 文件路径 | | inputfile | 必需。输入的 .dll.a 或 .def 文件路径 | | options | 可选。选项参数,支持以下选项:
- `dllname` - DLL 文件名
- `arch` - 架构(如 "x64") | #### 返回值说明 无返回值 #### 用法说明 这个功能对 Fortran & C++ 混合项目特别有帮助,因为 VS 不提供fortran编译器,只能用MinGW的gfortran来编译fortran部分,然后和VS的项目链接。 往往这样的项目同时有一些其他的库以vs格式提供,因此纯用MinGW编译也不行,只能使用这个功能来混合编译。 而 cmake 也有个类似的 [GNUtoMS](https://cmake.org/cmake/help/latest/prop_tgt/GNUtoMS.html)。 相关 issues 见:[#1181](https://github.com/xmake-io/xmake/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 快速测试验证