在Windows上使用MinGW(GCC)编译器时,可以定义CMAKE_GNUtoMS
变量,自动将GCC格式库.dll.a
转换为微软编译器支持的.lib
格式。
测试环境:开发环境CLion + MinGW64和VS2019。
使用方式
在CMakeLists.txt
中添加CMAKE_GNUtoMS_VCVARS
和CMAKE_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.lib
、libdemo.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.lib
、libdemo.dll
和library.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
网友评论