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

在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 

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 
#include 
#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格式)