在Windows上使用MinGW(GCC)編譯器時(shí),可以定義CMAKE_GNUtoMS變量,自動(dòng)將GCC格式庫(kù).dll.a轉(zhuǎn)換為微軟編譯器支持的.lib格式。
測(cè)試環(huán)境:開發(fā)環(huán)境CLion + MinGW64和VS2019。
使用方式
在CMakeLists.txt中添加CMAKE_GNUtoMS_VCVARS和CMAKE_GNUtoMS即可,使用時(shí)需要注意它們的位置和順序。其中CMAKE_GNUtoMS_VCVARS用于設(shè)置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位的庫(kù),所以使用vcvars64.bat,如果是32位,就是vcvars32.bat。
編譯時(shí)輸出如下:
"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.
正在創(chuàng)建庫(kù) libdemo.lib 和對(duì)象 libdemo.exp
[100%] Built target demo
Build finished

編譯結(jié)果
然后把libdemo.lib、libdemo.dll和頭文件拷貝到MSVC編譯環(huán)境中運(yùn)行即可,注意MSVC編譯目標(biāo)也要設(shè)置為64位。
測(cè)試
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.lib、libdemo.dll和library.h拷貝到工程目錄中,然后編譯即可。
- 源文件
// cdemo.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。
//
#include <stdio.h>
#include <math.h>
#include "library.h"
#pragma comment(lib, "libdemo.lib")
void main() {
hello();
version();
}
// 6. 將來(lái),若要再次打開此項(xiàng)目,請(qǐng)轉(zhuǎn)到“文件”>“打開”>“項(xiàng)目”并選擇 .sln 文件

運(yùn)行結(jié)果
版權(quán)聲明:本文為「txfly」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:http://m.itdecent.cn/p/cc4b19f1e31f