CMakelists.txt简单介绍

news2024/10/6 1:42:16

        先祝大家开工大吉,这篇策划一下CMakelists.txt,它依托在Cmake里,在大型工程、平台兼容方面非常好用的C++项目编译工具,再此先对它做一个简短的介绍。

目录

一、CMakelists.txt简介

二、使用示例

三、总结


一、CMakelists.txt简介

        CMakelists.txt是Cmake的配置文件,用于描述编译方式和项目依赖。在windows下CMake 会读取 CMakeLists.txt 中的设置,并生成项目的 makefile 或 Visual Studio 工程文件,其中makefile时linux下的C++项目编译文件,不了解makefile请看这篇:

https://bobowen.blog.csdn.net/article/details/124248066

 Visual Studio在windows平台下独霸一方,使用Cmake生成可编译的 Visual Studio工程文件很方便。并且,使用 CMake 可以跨平台编译项目,例如 Windows、Linux 和 macOS。CMakeLists.txt 中的命令包括项目名称、编译器选项、源文件列表、链接库依赖等。使用 CMake 可以很方便地管理项目的依赖关系,并且可以通过调用 cmake 命令来生成项目的 makefile 或者是 IDE 的工程文件。

        那些使用CMakelists.txt的情况,首要的就是跨平台,一个项目可以只用一份编译脚本就ok。然后就是可以管理项目依赖、支持多种编译器(GCC、Clang、Visual Studio )、支持多种构建类型、支持第三方库(Opencv、Boost等)。

  1. 跨平台编译项目:CMake 可以根据不同平台的环境自动生成对应的 makefile 或 Visual Studio 工程文件,从而方便地在 Windows、Linux 和 macOS 等平台上编译项目。

  2. 管理项目依赖:CMake 可以通过 CMakeLists.txt 中的命令来管理项目的依赖关系,例如包含头文件目录、链接库文件等。

  3. 支持多种编译器:CMake 支持多种编译器,例如 GCC、Clang、Visual Studio 等,可以根据需要在 CMakeLists.txt 中设置对应的编译器选项。

  4. 支持多种构建类型:CMake 支持多种构建类型,例如 Release、Debug、Profile 等,可以根据需要在 CMakeLists.txt 中设置对应的构建类型选项。

  5. 支持第三方库:CMake 支持在项目中使用第三方库,例如 Boost、OpenCV 等,可以在 CMakeLists.txt 中配置相关的头文件目录和库文件。

Cmakelists.txt的风格:

cmake_minimum_required(VERSION 3.0)

project(myproject VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

add_executable(myproject main.cpp)
target_link_libraries(myproject)
  • project():设置项目名称和版本号。
  • cmake_minimum_required():设置 CMake 的最低版本要求。
  • set():设置变量的值。
  • add_executable():添加可执行文件。
  • add_library():添加库文件。
  • target_link_libraries():链接库文件。
  • include_directories():添加头文件目录。

二、使用示例

        src中有main.cpp include中有add.h和sub.h lib中有add.cpp与sub.cpp编好的mylib.lib

        add.h:

#pragma once
int add(int a, int b);

        add.cpp:

#include"add.h"
int add(int a, int b)
{
    return a+b;
}

        sub.h:

#pragma once
int sub(int a, int b);

        sub.cpp:

#include"sub.h"
int sub(int a, int b)
{
    return a-b;
}

我们将add和sub编程mylib.lib,注意mylib为你的lib名称,在我的例子里是IDATest.lib,在visual里就可以。

        Cmakelist.txt的书写:

cmake_minimum_required(VERSION 3.10)
project(MyProject)

include_directories(include)

add_executable(main src/main.cpp)
target_link_libraries(main IDATest.lib)

 我们在同级目录下创建build方便存入编译好的文件,最终的文件目录格式如下:

 然后就是Cmake的安装,需要加到环境变量中,看下面链接:

CMake的安装(超级详细)_小码1111的博客-CSDN博客_cmake安装

https://wendy.blog.csdn.net/article/details/123029415?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-123029415-blog-115654082.pc_relevant_vip_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-123029415-blog-115654082.pc_relevant_vip_default&utm_relevant_index=2

        cmd进入build,输入命令   camke ..  注意中间有空格。

  

        大功告成。

三、总结

        本篇为CMakelist.txt入坑简单介绍,后续有时间给大家带来其语法的详细介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eclipse swt环境搭建

通过Eclipse Marketplace安装打开eclipse,点击help,在弹出的框中,选择Eclipse Marketplace。如下所示。。。搜索windows 安装插件一、创建一个SWT项目点击左上角的File - > New -> Other...进入后搜索SWT ,选中在WindowBuilder下的SWT …

CnOpenData中国彩票销售数据

一、数据简介 彩票是一种编有号码的证券,按票面价格出售。开奖后,持有中奖号码奖券的,可按规定领奖。它是一种建立在机会均等基础上的、具有公平竞争特征的娱乐游戏。国家发行彩票的目的是筹集社会公众资金,资助福利、体育等社会公…

springboot中整合mybatis及简单使用

springboot中整合mybatis及简单使用1.引入依赖2.在applicaiton.yaml中配置数据源以及mybatis3.创建sql测试表4.编写mapper接口和mapper.xml文件4.1 mapper接口4.2 mapper.xml4.3 mybatisX快速开发插件5.创建service层和controller层5.1 创建service层5.2 创建controller层6.项目…

[网鼎杯 2018]Fakebook

目录 信息收集 代码审计 思路 解法一(非预期解) 解法二(预期解) 信息收集 目录扫描代码泄露扫描 robots.txt;flag.php;login.php;user.php;view.php;join.php; 直接打开flag.php后没有回显,应该需要通过ssrf来访…

Qt音视频开发12-easyplayer内核

一、前言 在视频监控行业经常看到两个厂家广告打得比较厉害,一个是青犀视频对应easyplayer,一个是大牛直播,两个最初都是sdk免费,并提供调用示例源码,后面大牛直播的sdk以及示例都无法运行,目前就剩下免费…

Word处理控件Aspose.Words功能演示:如何在 C# .NET 中将 PNG、JPG 转换为 Word

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

git push clone 参数具体解析

1 问题背景 git远程仓库有很多命令,但是教程里面讲解的都是特别模糊的。 2 命令实例解析 2.1 git branch -vv -a命令具体解析 在开始下面的命令解析之前,我们一定要学会git branch -vv -a这个命令,这个是查询本地仓库远程仓库跟踪关系最全…

《从0开始学大数据》之ZooKeeper是如何保证数据一致性的

背景 在分布式集群系统中,比如两个应用程序都需要对一个文件路径进行写操作,但是如果两个应用程序对于哪台服务器是主服务器的判断不同,就会分别连接到两个不同的 NameNode 上,并都得到了对同一个文件路径的写操作权限&#xff0…

振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线

振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线 指令生成器 ( 1) 指令生成 指令生成器可根据需要生成符合 MODBUS 和 AABB 通讯协议的读取和控制指令。 通过点击串口调试工具内的【 指令生成器】 按钮,可打开指令生成器窗口&#…

【SpringBoot高级篇】SpringBoot集成XXL-JOB分布式任务调度平台

【SpringBoot高级篇】SpringBoot集成XXL-JOB分布式任务调度平台简介下载源码部署任务调度平台执行SQL脚本部署任务平台简单使用初始化测试项目pom依赖SampleXxlJob修改配置调度平台配置执行器任务管理添加任务简介 XXL-JOB是一个分布式任务调度平台,其核心设计目标…

连续函数的运算与初等函数的连续性——“高等数学”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是连续函数的运算与初等函数的连续性,上篇博客我们学到了函数的连续性和间断点,这篇博客相当于是上篇博客的一个补充,好吧,现在就让我们进入高等数学的世界吧 一、…

【刷题】不用加减乘除做加法

这是一道简单的数学题。但是比较繁琐,需要有耐心。 目录 前言 一、找规律 二、怎么实现加法? 总结 前言 这道题不让用四则运算符做加法,于是我第一反应是用位运算。 难道转成二进制再使用位运算吗,显然不需要,列草稿可…

Java 开发环境配置 “JDK”(超详细整理,适合新手入门)

前言 📜 “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 一、什么是JDK? 1、大概介绍 2、详细介绍 …

MySQL进阶——触发器

1.触发器定义 同存储过程和函数类似,MySQL中的触发器也是存储在系统内部的一段程序代码,可以把它看作是一个特殊的存储过程。所不同的是,触发器无需人工调用,当程序满足定义条件时就会被MySQL自动调用。这些条件可以称为触发事件…

Weapp影视评分项目开发(04):三方组件的使用

知识点 三方组件库的安装与使用 computed 的安装与使用 新建代码分支 我们以 master 为基准,在 gitee 上新建代码分支 component,并在该分支上进行代码开发。命令如下: git pull // 拉取 component 分支 git checkout component // 切换到…

哪款无线耳机音质好?发烧友推荐四大音质超好的蓝牙耳机

蓝牙耳机因为摆脱了线的束缚,使用起来会更方便,近几年在人们的日常生活中也越来越常见。哪款无线耳机音质好?在此,我来给整理了几款发烧友都在推荐的好音质蓝牙耳机,一起来看看吧。 一、南卡小音舱蓝牙耳机 售价&…

推荐系统之ABTest实验中心

5.3 ABTest实验中心 学习目标 目标 无应用 无 个性化推荐系统、搜索引擎、广告系统,这些系统都需要在线上不断上线,不断优化,优化之后怎么确定是好是坏。这时就需要ABTest来确定,最近想的办法、优化的算法、优化的逻辑数据是正向…

Linux | 人生苦短,我用Vim【最受欢迎的编辑器】

一探顶级编辑器——Vim一、初次见面,你好vim1、vim的基本概念2、IDE与编辑器的区别3、vim中的五种常见模式介绍二、初出茅庐,vim基本操作1、安装vim,进入vim2、vim中的模式切换📺三、初露锋芒,vim指令集1、&#x1f52…

数据库系统概论——关系代数详解

文章目录1、关系代数概述1.1 传统的集合运算1.2 专门的关系运算1.2.1 选择运算1.2.2 投影(Projection)1.2.3 连接(Join)1.2.4 两类常用连接运算1.2.5 除(Division)1、关系代数概述 关系代数是一种抽象的查…

虹科分享 | 虹科智能自动化2022文章精选

虹科智能自动化事业部一直围绕着工业自动化、能源管理与楼宇自动化三大方向,为客户提供最满意的技术服务和最适合的解决方案,并结合客户需求、行业发展动向和产品资讯,虹科智能自动化团队为大家带来了丰富的技术文章和应用案例。温故而知新&a…