用CMake编译项目 CMake和g++的区别

news2024/12/23 4:49:14

0.同样是编译c++文件有了g++为什么又出了个CMake?

g++适用于要编译的文件较少的情况。
而CMake像是写好的脚本,可以一键编译很多c++文件。

一.创建项目和CMakeLists.txt文件

1.1 创建一个项目,目录结构如下

在这里插入图片描述

1.2 在项目的根目录下创建一个CMakeLists.txt文件用来编译

CMakeLists.txt的内容如下:

# 1.指定cmake的版本要求
cmake_minimum_required(VERSION 3.0)

# 2.指定项目名称,一般用大写
project(HELLOWORLD)

# 3.编译helloworld.cpp文件生成可执行文件 
# 3.1 helloWorld_cmake是名字 helloworld.cpp是要编译的文件,两者用空格隔开
# 3.2 下面这句命令相当于 g++ helloworld.cpp -o helloworld
add_executable(helloWorld_cmake helloworld.cpp)

指定cmake的版本要求时,可以打开终端查看cmake版本

cmake --version

二.用CMake内部构建的方法构建项目(不推荐)

2.1 生成cmake文件
打开终端进入该项目的目录下,输入如下命令,表示编译当前目录下的项目

cmake .

在这里插入图片描述在这里插入图片描述上面的信息表示:检测c++语言编译器,生成配置信息。最后告诉你生成的文件放到了哪。
运行命令之后生成了许多cmake相关的文件如下:
在这里插入图片描述

2.2 编译项目并生成可执行文件

命令行直接输入

make

在这里插入图片描述

第一行表示正在构建cpp.o文件
第二行表示链接 helloWorld_camke可执行文件

最终生成了 hellWorld_cmake可执行文件
在这里插入图片描述

2.3 运行生成的可执行文件

./helloWorld_cmake

二.外部构建(推荐)

2.1 对简单文件构建

1. 文件目录
在这里插入图片描述

2. 首先在项目的根目录下创建一个CMakeLists.txt文件用来编译

CMakeLists.txt的内容如下:

# 1.指定cmake的版本要求
cmake_minimum_required(VERSION 3.0)

# 2.指定项目名称,一般用大写
project(HELLOWORLD)

# 3.编译helloworld.cpp文件生成可执行文件 
# 3.1 helloWorld_cmake是名字 helloworld.cpp是要编译的文件,两者用空格隔开
# 3.2 下面这句命令相当于 g++ helloworld.cpp -o helloworld
add_executable(helloWorld_cmake helloworld.cpp)

指定cmake的版本要求时,可以打开终端查看cmake版本

cmake --version

内部构建的方法会生成很多冗余文件,而外部构建是将输出文件与源文件放到不同目录中。

3. 核心构建代码

# 进入当前项目目录,创建build文件夹
mkdir build
cd build
# 对把上上级的目录进行构建,生成cmake文件
cmake ..
# 执行make命令对cpp文件进行编译并生成可执行文件
make

最终项目目录如下:

在这里插入图片描述

2.2 对多文件夹,多文件构建

项目目录为:
在这里插入图片描述在根目录创建 CMakeLists.txt,内容如下

cmake_minimum_required(VERSION 3.0)

project(SWAP)

# 把include文件夹包含在头文件搜索路径中
# 对应中的g++ main.cpp src/swap.cpp -Iinclude -o main中的 -Iinclude
include_directories(include)

# 指定输出文件名:main_cmake,后面是要编译的文件
add_executable(main_cmake main.cpp src/swap.cpp)

创建build文件夹并生成CMake相关的文件

mkdir build
cd build
cmake ..

使用make命令,编译文件并生成可执行文件

make

在这里插入图片描述

执行生成的可执行文件

./main_cmake

在这里插入图片描述

注意

项目名必须用英文,否则输入make命令没有反应

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

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

相关文章

个人常用Linux命令

来自 linux命令学习-2023-8-1 153913.md等 1、切换目录 cd //切换目录 cd change directory cd 目录名 cd .. 返回上一级目录 pwd显示当前所处目录cd 绝对路径 cd ~ 表示一个用户的home目录 cd - 表示上一次访问的目录 cd / 表示进入根目录下//新建目录/data,并且进入/data…

001、Nvidia Jetson Nano Developer KIT(b01)-系统与登录

之——镜像烧录与远程登录 杂谈 Nvidia Jetson Nano Developer KIT(b01,4G),系统配置全纪录,镜像烧录、系统安装、远程桌面安装、cuda与torch安装、pycharm、pycuda、tensorrt等等。 正文 1.开发板系统安装 1.1 开发…

创意涌动:CSDN·大学生博主14天创作挑战赛·第二期,正式开启报名!

文章目录 ⭐️ 活动介绍⭐️ 活动详情⭐️ 活动奖品⭐️ 活动流程⭐️ 评审规则⭐️ 报名&投稿注意事项⭐️ 关于活动官方 活动报名地址(点击跳转) 本次活动与官方活动及其他博主的创作型活动并不不冲突! ⭐️ 活动介绍 亲爱的大学生博主…

【无标题】【教3妹学编程-算法题】2918. 数组的最小相等和

3妹:呜呜,烦死了, 脸上长了一个痘 2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。 3妹:切,你不懂,影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊, 工作…

Leo赠书活动-05期 【打造敏捷测试团队】文末送书5本

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

运动想象 EEG 信号分析

基于运动想象的公开数据集:Data set IVa (BCI Competition III)1 数据描述参考前文:https://blog.csdn.net/qq_43811536/article/details/134224005?spm1001.2014.3001.5501 本文使用公开数据集 Data set IVa 中的部分被试数据,数据已公开可…

Rust和Pytho写一段采集公众号代码

首先,我们需要安装Rust和Python的requests库。Rust的requests库可以用来发送HTTP请求,而Python的requests库可以用来处理HTTP响应。 // 导入所需的库 use std::io; use std::env;// 使用rustc命令来编译我们的程序 fn main() {// 获取命令行参数let args…

GuLi商城-商品服务-API-三级分类-查询-递归树形结构数据获取

导入sql语句 insert into pms_category(cat_id,name,parent_cid,cat_level,show_status,sort,icon,product_unit,product_count) values (1,图书、音像、电子书刊,0,1,1,0,NULL,NULL,0),(2,手机,0,1,1,0,NULL,NULL,0),(3,家用电器,0,1,1,0,NULL,NULL,0),(4,数码,0,1,1,0,NULL…

分享六个 Vue3 开发必备的 VSCode 插件

今天分享 6 个 Vue3 开发必备的 VSCode 插件,可以直接用过 VSCode 的插件中心直接安装使用。 1. Volar 🔥 下载数 153 万 相信使用 VSCode 开发 Vue2 的同学一定对 Vetur 插件不会陌生,作为 Vue2 配套的 VSCode 插件,它的主要作…

混合云中 DevOps 的最佳实践

近年来,出现了各种工具、技术和框架,其目标是增强灵活性、性能和可扩展性。传统的整体方法已被微服务和纳米服务等更加模块化的方法所取代。此外,云计算的兴起导致本地软件被云环境所取代,云环境提供了以前无法提供的广泛优势和功…

获取狮子座明年恋爱运势预测API接口

获取狮子座明年恋爱运势预测API接口的功能是通过API接口获取狮子座明年恋爱运势的预测结果,为用户提供恋爱运势指导。 首先,使用挖数据平台该API接口需要先申请API密钥。在获取API密钥后,可以使用该接口进行开发。 API接口地址为&#xff1a…

[LC 总结] 前缀和(Prefix Sum)总结 10 道相关练习题

[LC 总结] 前缀和(Prefix Sum)总结& 10 道相关练习题 类型与题目列表如下: 题目的解法都做过了,会留在最后一个部分,接下来就梳理一下 prefix sum,列举的题目从简单到 -> 困难 基础 prefix sum 其…

【深蓝学院】手写VIO第9章--课程总结--笔记

0. 内容 1. 课程回顾 最大后验概率MAP,如果不知道先验则是MLE,如果观测服从高斯分布(关于为什么服从高斯分布有个pdf)则可转化为LSP。 残差构建主要讲了IMU残差的构建,包括预积分模型,误差模型(…

使用Android Jetpack Compose渲染效果打造酷炫的动画效果

如何在Android Jetpack Compose中使用渲染效果打造令人惊艳的视觉体验 学习示例:如何使用渲染效果来改变UI界面 引言 Jetpack Compose提供了各种工具和组件来构建引人入胜的UI,而在Compose中较为鲜为人知的一个宝藏是RenderEffect。 在这篇博文中&a…

freertos任务参数

实现多个任务利用同一个函数,传进不同的任务参数,打印不同的任务内容。多个人用同一个电脑干不同工作,美工用电脑干美工,程序员用电脑敲代码 #include "stm32f10x.h" // Device header #include &quo…

.NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth

前言 我相信做开发的同学应该都对接过各种各样的第三方平台的登录授权,来获取用户信息(如:微信登录、支付宝登录、QQ登录、GitHub登录等等)。今天给大家推荐一个.NET开源好用的、全面的、方便第三方登录组件集合框架:…

【ES专题】ElasticSearch功能详解与原理剖析

目录 前言要点阅读对象阅读导航前置知识笔记正文一、ES数据预处理1.1 Ingest Node:摄入节点1.2 Ingest Pipeline:摄入管道1.3 Processor:预处理器——简单加工1.4 Painless Script:脚本——复杂加工1.5 简单实用案例 二、文档/数据…

C语言——从键盘任意输人一个三位数的自然数,求该数个位、十位、百位上的数字之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,ge,shi,bai;printf("输入一个三位数整数&#xff1a;\n");scanf("%d",&i);gei%10; //个位shii%100/10; //十位baii/100; //百位printf("个位:%d,十位:%d,百位:…

51基于matlab模拟退火算法矩形排样

基于matlab模拟退火算法矩形排样&#xff0c;基于最低水平线算法完成矩形板材下料优化&#xff0c;输出最优剩料率和最后的水平线&#xff0c;可替换自己的数据进行优化&#xff0c;程序已调通&#xff0c;可直接运行。 51matlab模拟退火算法矩形排样 (xiaohongshu.com)

两个栈实现队列

要用两个栈实现队列&#xff0c;就需要了解栈和队列的特性&#xff0c;栈是先进后出&#xff0c;队列是先进先出。基本思路是&#xff0c;把数据先压入栈1中&#xff0c;然后数据在栈1中输出再压入栈2&#xff0c;输出后就能实现队列的先进先出。 package Package;import java.…