CMAKE_GNUtoMS:將GNU格式庫(kù)轉(zhuǎn)換為MSVC格式

在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_VCVARSCMAKE_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.dlllibrary.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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容