当前位置: 首页 > news >正文

第一个CMAKE项目hello cmake

#注意! 这篇文章是为WINDWOS用户写的
#请检查你的电脑上已经安装了MINGW和CMAKE

快速检查方法如下

C:\Users\Basicoperation>g++ --version
g++ (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.C:\Users\Basicoperation>cmake --version
cmake version 3.27.1CMake suite maintained and supported by Kitware (kitware.com/cmake).

没有安装MINGW ?可以看看楼主的上一篇文章:安装MINGW保姆教程
CMAKE安装方法CSDN上也是一搜一大把。

第一个CMAKE 项目

流程大概是这样

创建项目目录结构
编写源代码
编写 CMakeLists.txt
创建构建目录
配置 CMake 生成 Makefile
使用 mingw32-make 构建项目
生成可执行文件

就手把手的来编译一下我们最熟悉的hello world吧。这对你理解CMAKE的运行很有帮助

文件构成

main.cpp

#include <iostream>using namespace std;int main()
{cout<<"hello world"<<endl;return 0;
}

CMakeLists.txt

如果没有需求,不要修改这个文件的名字

# #是CMAKE的注释符号
#这个是要求的CMAKE的最低版本
cmake_minimum_required(VERSION 3.10)#项目的名称
project(HelloWorld)#设定语法集
set(CMAKE_CXX_STANDARD 11)#这是加入可执行文件 main.pp 目标是生成HelloWorld
add_executable(HelloWorld  main.cpp)# 设置可执行文件的输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

文件目录像这样

PS F:\Basic_Source\Tech\Code\cmake_test> mkdir build目录: F:\Basic_Source\Tech\Code\cmake_testMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2025/2/21     22:11                buildPS F:\Basic_Source\Tech\Code\cmake_test> dir 目录: F:\Basic_Source\Tech\Code\cmake_testMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2025/2/21     22:11                build
-a----         2025/2/21     21:58            401 CMakelists.txt
-a----         2025/2/21     21:44            112 main.cpp

开始构建

PS F:\Basic_Source\Tech\Code\cmake_test\build> cmake -G "MinGW Makefiles" ..
-- The C compiler identification is GNU 14.2.0
-- The CXX compiler identification is GNU 14.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (6.6s)
-- Generating done (0.0s)
-- Build files have been written to: F:/Basic_Source/Tech/Code/cmake_test/build
PS F:\Basic_Source\Tech\Code\cmake_test\build> dir目录: F:\Basic_Source\Tech\Code\cmake_test\buildMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2025/2/21     22:15                CMakeFiles
-a----         2025/2/21     22:15          16650 CMakeCache.txt
-a----         2025/2/21     22:15           1591 cmake_install.cmake
-a----         2025/2/21     22:15           5528 Makefile
注意!
cmake -G "MinGW Makefiles" ..
  • 不要直接使用cmake ..因为这样可能会生成VS项目文件,你需要明确的指出生成MinGW风格的Makefile文件
  • .. 的意思是CMakelists.txt文件在上一层目录,这个不能漏掉
开始make

注意,你的make 可能并不是make!直接下载的mingw包中,make的名字可能会变化。你可以在CMD中这样尝试,也可以去MINGW/BIN目录中查看

C:\mingw64\bin>make --version
'make' 不是内部或外部命令,也不是可运行的程序
或批处理文件。C:\mingw64\bin>mingw32-make --version
GNU Make 4.4.1
Built for x86_64-w64-mingw32
Copyright (C) 1988-2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

在BIN中查看

>dir
...2025/01/16  22:29            53,760 libwinpthread-1.dll
2025/01/16  22:29        36,896,256 lto-dump.exe
2025/01/16  23:29           278,016 mingw32-make.exe
2025/01/16  20:25         1,284,608 nm.exe...

最后构建

PS F:\Basic_Source\Tech\Code\cmake_test\build> mingw32-make
[ 50%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.obj
[100%] Linking CXX executable HelloWorld.exe
[100%] Built target HelloWorld
PS F:\Basic_Source\Tech\Code\cmake_test\build> .\HelloWorld.exe
hello world

嗯,这样就算完成了。不过还有点悬念,我们明明设计EXE放到BIN中但是却还是在BUILD目录里

可能的原因是set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)要放在add_executable(HelloWorld main.cpp)之前

PS F:\Basic_Source\Tech\Code\cmake_test\build> dir目录: F:\Basic_Source\Tech\Code\cmake_test\buildMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2025/2/21     22:25                CMakeFiles
-a----         2025/2/21     22:15          16650 CMakeCache.txt
-a----         2025/2/21     22:15           1591 cmake_install.cmake
-a----         2025/2/21     22:25          47695 HelloWorld.exe
-a----         2025/2/21     22:15           5528 Makefile

相关文章:

第一个CMAKE项目hello cmake

#注意&#xff01; 这篇文章是为WINDWOS用户写的 #请检查你的电脑上已经安装了MINGW和CMAKE 快速检查方法如下 C:\Users\Basicoperation>g --version g (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. …...

骶骨神经

骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术&#xff08;七&#xff09; 勇闯禁区 骶骨肿瘤切除术...

基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统购物管理采取了人工的管理方法&#xff0c;但这种管理方法存…...

使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作

如果你想提高工作效率&#xff0c;减少鼠标操作&#xff0c;掌握键盘快捷键是一个非常有效的方式。在编程过程中&#xff0c;熟练使用快捷键能够快速管理文件、标签页&#xff0c;节省时间并提升效率。比如&#xff0c;Ctrl P 和 Ctrl W 可以快速打开和关闭文件&#xff0c;而…...

【找工作】C++和算法复习(自用)

文章目录 C头文件自定义排序函数stl 算法数据结构树状数组 数学 自用随便记录 C 排序 stl 头文件 全能头文件&#xff1a; #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map&…...

大语言模型基础

简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...

深入浅出机器学习:概念、算法与实践

目录 引言 机器学习的基本概念 什么是机器学习 机器学习的基本要素 机器学习的主要类型 监督学习&#xff08;Supervised Learning&#xff09; 无监督学习&#xff08;Unsupervised Learning&#xff09; 强化学习&#xff08;Reinforcement Learning&#xff09; 机器…...

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…...

老游戏回顾:d2

游戏中玩家创建属于自己的角色&#xff0c;在一片片暗黑大地上奔跑、杀敌、寻宝、成长&#xff0c;最终打败统治各个大陆的黑暗势力&#xff0c;拯救游戏中的各个种族。 《暗黑破坏神II》的制作团队包括编程小组、运动物体制作小组和背景制作小组。游戏设计很大程度上是开放的&…...

【深度学习】Pytorch的深入理解和研究

一、Pytorch核心理解 PyTorch 是一个灵活且强大的深度学习框架&#xff0c;广泛应用于研究和工业领域。要深入理解和研究 PyTorch&#xff0c;需要从其核心概念、底层机制以及高级功能入手。以下是对 PyTorch 的深入理解与研究的详细说明。 1. 概念 动态计算图&#xff08;D…...

什么是 Vue 的自定义事件?如何触发和监听?

Vue 的自定义事件详解 什么是自定义事件&#xff1f; 在 Vue 中&#xff0c;自定义事件是组件之间通信的重要机制。自定义事件允许子组件向父组件发送消息&#xff0c;通常用于处理用户交互或异步操作的结果。这种机制使得组件间的通信更加灵活和解耦。 自定义事件的基本概念…...

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…...

DEMF模型赋能多模态图像融合,助力肺癌高效分类

目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…...

Android:权限permission申请示例代码

Android应用项目每次最开始都要进行权限申请&#xff0c;贴一下权限申请的示例代码&#xff0c;方便后续Ctrl CV使用 1.AndroidManifest.xml 配置要申请的权限 <uses-permission android:name"android.permission.READ_CONTACTS" /> <uses-permission and…...

AI Agent Service Toolkit:一站式大模型智能体开发套件

项目简介 该工具包基于LangGraph、FastAPI和Streamlit构建,提供了构建和运行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服务、用于与服务交互的客户端以及一个使用客户端提供聊天界面的Streamlit应用。用户可以利用该工具包提供的模板快速搭建基于LangGraph框架…...

大数据SQL调优专题——Hive执行原理

引入 Apache Hive 是基于Hadoop的数据仓库工具&#xff0c;它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中&#xff0c;HQL默认转换成MapReduce程序运行到Yarn集群中&#xff0c;大大降低了非Java开发者数据分析的门槛&#xff0c;并且Hive提供命令…...

Python程序打包 |《Python基础教程》第18章笔记

《Python基础教程》第1章笔记&#x1f449;https://blog.csdn.net/holeer/article/details/143052930 第18章 程序打包 程序可以发布后&#xff0c;你可能想先将它打包。如果程序只包含一个.py文件&#xff0c;这可能不是问题。然而&#xff0c;如果用户不是程序员&#xff0…...

图论 之 迪斯科特拉算法求解最短路径

文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题&#xff0c;分为使用BFS和使用迪斯科特拉算法&#xff0c;这两种算法求解的范围是有区别的 BFS适合求解&#xff0c;边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...

掌握Spring开发_常用注解详解

1. 前言 1.1 写作目的 本文旨在全面解析Spring框架中常用的注解,帮助开发者更好地理解和使用这些注解,提高开发效率和代码质量。Spring框架提供了丰富的注解,简化了依赖注入、AOP、事务管理、Web开发等多个方面的开发工作。通过本文的学习,读者可以掌握这些注解的使用方法…...

华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下&#xff1a; 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件&#xff08;Firmware&#xff0…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...