CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

2024-06-02 16:20

本文主要是介绍CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 CMake介绍

  • CMake是一个开源的、跨平台的构建系统,用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK(Insight Segmentation and Registration Toolkit)和VTK(Visualization Toolkit)等开源项目开发,后来成为了一个独立的开源项目。
  • CMake的设计目标是让开发者能够以一种简单、统一的方式编写构建规则,这些规则可以在多种操作系统和编译器环境下工作,从而实现代码的跨平台编译。

2 CMake安装

  • CMake包下载地址

2.1 Linux平台安装

  • 以ubuntu 20.04 版本为例

2.1.1 命令行安装

  • apt install cmake

2.1.2 源码编译安装

  • 安装编译工具和依赖库
    •   sudo apt install g++sudo apt install makesudo install libssl-dev
      
  • 下载源码
    • 以3.28.5版本为例,下载这个源码包 cmake-3.28.5.tar.gz
  • 编译安装
    • 解压后进入cmake源码目录,执行以下命令编译安装
    •   ./configuire# 编译make -j4# 默认会安装到/usr/local/share目录下make install
      
  • 查看版本
    • 安装完成后重新打开终端,执行cmake -version就可以看到当前安装的版本。
    •   cmake version 3.28.5CMake suite maintained and supported by Kitware (kitware.com/cmake).
      
  • 设置环境变量
    • 如果安装后执行cmake -version看不到版本,可能是环境变量没有设置进去
    • 打开 ~/.bash_profile 在文件末尾添加以下内容
    •   export PATH=/usr/local/share/cmake-3.28
      

2.2 Windows平台安装

  • 下载windows平台安装包 cmake-3.28.5-windows-x86_64.msi
  • 下载后直接双击安装
    • 安装过程中会让你选择是否设置环境变量,这里就选择设置系统环境变量。
    • 在这里插入图片描述
    • 默认会安装到 C:\Program Files\CMake目录下
    • 安装完成后,打开cmd命令行工具,执行cmake -version就可以看到当前安装的CMake版本

3 CMake生成可执行程序

  • 文件结构
    •   ├── build├── CMakeLists.txt└── src└── main.cpp
      
  • build目录: 编译目录
  • src目录: 存放源文件的目录
  • CMakeLists.txt文件内容
    •   # 指定CMake最低版本cmake_minimum_required(VERSION 3.20)# 构建项目的名称project(cmake_first_demo)# 构建执行程序# PROJECT_SOURCE_DIR 是CMake的一个系统变量,表示当前工程目录,即CMake所在目录add_executable(cmake_first_demo ${PROJECT_SOURCE_DIR}/src/main.cpp)
      

3.1 Windows平台

  • 构建项目

    •   # 构建项目,在build目录下执行,此命令会使用默认编译器构建项目# ..表示上一级目录cmake ..# 或者通过-G参数,指定编译器构建项目cmake -G "Visual Studio 14 2015" ..
      
  • 构建项目时指定生成项目文件路径

    • 上面是手动创建了一个build项目来创建工程,还可以构建项目时自动创建目录
    • 在 CMakeLists.txt 所在目录下执行
    •   	# -S 指定CMakeLists.txt 文件所在目录# -B 指定工程文件生成目录cmake -S . -B build_x86
      
  • 编译可执行程序

    • 构建项目成功后,在build目录下会生成工程文件,可以用Visual Studio 编译器打开sln后缀的文件。选择工程,点击生成,在build/Release目录下就可以生成可执行程序。

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 也可以不用打开编译器,直接在build目录下执行以下命令

    •   # 默认生成Debug程序,通过--config可指定生成Release程序cmake --build ./ --config Release
      
    • 在build/Release 目录下也会生成可执行程序

3.2 Linux平台

  • CMake支持跨平台,因此在其Linux平台也可以直接编译,和Windows差别不大
  • 构建项目
    •   # 在build目录下执行cmake ..
      
    • 执行后会在build目录下生成以下工程文件,工程文件和Windows平台是不一样的。
    • 在这里插入图片描述
  • 编译可执行程序
    • 直接执行make命令生成可执行程序
    • 在这里插入图片描述

4 CMake生成静态库

  • 文件结构
    •   ├── build├── CMakeLists.txt└── src├── mymath.cpp└── mymath.h
      
  • CMakeLists.txt文件内容
    •   # 指定CMake最低版本cmake_minimum_required(VERSION 3.20)# 构建项目的名称project(mymath_demo)# 指定头文件路径include_directories(${PROJECT_SOURCE_DIR}/src)# 生成库文件(静态库)add_library(mymath_demo STATIC ${PROJECT_SOURCE_DIR}/src/mymath.cpp)
      
  • mymath.h文件内容
    •   #ifndef __MY_MATH_H__#define __MY_MATH_H__int mymath_add(int a, int b);#endif
      
  • mymath.cpp文件内容
    •   #include "mymath.h"int mymath_add(int a, int b){return a + b;}
      

Windows平台

  • 在build目录下执行
    •   cmake ..cmake --build . --config Release
      
  • 在build/Release目录下就会生成静态库文件
    • 在这里插入图片描述

Linux平台

  • 在build目录下分别执行以下命令
    •   cmake ..make
      
  • 就会生成对应的静态库文件 libmymath_demo.a
    • 在这里插入图片描述

5 CMake链接静态库

  • 文件结构
    •   ├── build├── CMakeLists.txt├── mymath│   ├── gcc_x64│   │   └── libmymath_demo.a│   ├── include│   │   └── mymath.h│   └── vc_x86│       └── mymath_demo.lib└── src└── main.cpp
      
  • mymath目录下的头文件和库文件,是在步骤4中编写和生成的,拷贝过来。
  • CMakeLists.txt文件内容
    •   # 指定CMake最低版本cmake_minimum_required(VERSION 3.20)# 构建项目的名称project(myproject)# 指定头文件路径include_directories(${PROJECT_SOURCE_DIR}/mymath/include)# 指定库文件路径IF(WIN32)link_directories(${PROJECT_SOURCE_DIR}/mymath/vc_x86)ELSEIF(UNIX)link_directories(${PROJECT_SOURCE_DIR}/mymath/gcc_x64)ENDIF()# 生成可执行程序add_executable(myproject ${PROJECT_SOURCE_DIR}/src/main.cpp)# 链接库target_link_libraries(myproject mymath_demo)
      
  • main.cpp文件内容
    •   #include <stdio.h>#include "mymath.h"int main(){int sum = mymath_add(10, 20);printf("sum = %d\n", sum);return 0;}
      

Windows平台

  • build目录下执行
    •   cmake ..cmake --build . --config Release
      
  • 在build/Release目录下会生成可执行程序

Linux平台

  • build目录下执行
    •   cmake ..make
      
  • 在build目录下会生成可执行程序

6 CMake生成动态库

  • 生成动态库时,使用步骤4中的代码工程。
  • 将CMakeLists.txt文件最后一行做修改,指定生成动态库
    •   # 指定CMake最低版本cmake_minimum_required(VERSION 3.20)# 构建项目的名称project(mymath_demo)# 指定头文件路径include_directories(${PROJECT_SOURCE_DIR}/src)# 生成库文件(动态库)add_library(mymath_demo SHARED ${PROJECT_SOURCE_DIR}/src/mymath.cpp)
      

Windows平台

  • 需要注意的是,Windows平台链接动态库时,需要先找到lib文件
  • 因此对 mymath.h 文件做修改,生成动态库的同时需要生成lib文件
    •   #ifndef __MY_MATH_H__#define __MY_MATH_H__// 导出接口到lib文件中int __declspec(dllexport) mymath_add(int a, int b);#endif
      
  • build目录下执行以下命令编译
    •   cmake ..cmake --build . --config Release
      
  • 会生成lib和dll文件
    • 在这里插入图片描述

Linux平台

  • 直接在build目录下执行命令编译就可以生成动态库
    •   cmake ..make
      
  • 生成了动态库文件
    • 在这里插入图片描述

7 CMake链接动态库

  • 使用步骤5中的代码工程
  • 链接动态库时,不用做任何修改,只需要将静态库文件替换为动态库文件即可。
  • 目录结构如下
    •   ├── build├── CMakeLists.txt├── mymath│   ├── gcc_x64│   │   └── libmymath_demo.so│   ├── include│   │   └── mymath.h│   └── vc_x86│       ├── mymath_demo.dll│       └── mymath_demo.lib└── src└── main.cpp
      

Windows平台

  • build目录下执行
    •   cmake ..cmake --build . --config Release
      
  • 在build/Release目录下会生成可执行程序
  • 运行时需要将 mymath_demo.dll 和可执行程序放到同一个目录下。

Linux平台

  • build目录下执行
    •   cmake ..make
      
  • 在build目录下会生成可执行程序

这篇关于CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1024469

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进