美文网首页
CMAKE_GNUtoMS:将GNU格式库转换为MSVC格式

CMAKE_GNUtoMS:将GNU格式库转换为MSVC格式

作者: txfly | 来源:发表于2021-08-12 17:35 被阅读0次

    在Windows上使用MinGW(GCC)编译器时,可以定义CMAKE_GNUtoMS变量,自动将GCC格式库.dll.a转换为微软编译器支持的.lib格式。

    测试环境:开发环境CLion + MinGW64和VS2019。

    使用方式

    CMakeLists.txt中添加CMAKE_GNUtoMS_VCVARSCMAKE_GNUtoMS即可,使用时需要注意它们的位置和顺序。其中CMAKE_GNUtoMS_VCVARS用于设置MSVC工具链,完整CMakeLists.txt文件如下:

    cmake_minimum_required(VERSION 3.19)
    
    set(CMAKE_GNUtoMS_VCVARS "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Auxiliary\\Build\\vcvars64.bat" CACHE STRING "txfly")
    
    set(CMAKE_GNUtoMS ON)
    
    project(demo)
    
    set(CMAKE_CXX_STANDARD 14)
    
    add_library(demo SHARED library.cpp library.h)
    

    我这儿编译的是64位的库,所以使用vcvars64.bat,如果是32位,就是vcvars32.bat

    编译时输出如下:

    "C:\Program Files\JetBrains\CLion\bin\cmake\win\bin\cmake.exe" --build C:\Users\txfly\CLionProjects\libtest\cmake-build-debug --target demo -- -j 9
    Scanning dependencies of target demo
    [ 50%] Building CXX object CMakeFiles/demo.dir/library.cpp.obj
    [100%] Linking CXX shared library libdemo.dll
    **********************************************************************
    ** Visual Studio 2022 Developer Command Prompt v17.0.0-pre.2.1
    ** Copyright (c) 2021 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'
    Microsoft (R) Library Manager Version 14.30.30401.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
      正在创建库 libdemo.lib 和对象 libdemo.exp
    [100%] Built target demo
    
    Build finished
    
    编译结果

    然后把libdemo.liblibdemo.dll和头文件拷贝到MSVC编译环境中运行即可,注意MSVC编译目标也要设置为64位。

    测试

    CLion工程,编译器为MinGW64。

    • 头文件library.h
    #define DEMO_LIBRARY_H
    
    #ifdef __cplusplus
    extern "C" {
    #endif
        
    void hello();
    
    void version();
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif //DEMO_LIBRARY_H
    
    • 源文件library.c
    #include "library.h"
    #include <stdio.h>
    
    void hello() {
        printf("Hello, World!\n");
    }
    
    void version() {
        printf("version: 1.2.2\n");
    }
    
    • cmake CMakeLists.txt
    cmake_minimum_required(VERSION 3.19)
    
    set(CMAKE_GNUtoMS_VCVARS "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Auxiliary\\Build\\vcvars64.bat" CACHE STRING "txfly")
    
    set(CMAKE_GNUtoMS ON)
    
    project(demo)
    
    set(CMAKE_CXX_STANDARD 14)
    
    add_library(demo SHARED library.cpp library.h)
    

    VS2019工程
    libdemo.liblibdemo.dlllibrary.h拷贝到工程目录中,然后编译即可。

    • 源文件
    // cdemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <stdio.h>
    #include <math.h>
    #include "library.h"
    
    #pragma comment(lib, "libdemo.lib")
    
    void main() {
        hello();
        version();
    }
    //   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
    
    运行结果

    版权声明:本文为「txfly」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://www.jianshu.com/p/cc4b19f1e31f

    相关文章

      网友评论

          本文标题:CMAKE_GNUtoMS:将GNU格式库转换为MSVC格式

          本文链接:https://www.haomeiwen.com/subject/foblbltx.html