当前位置: 首页 > 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
http://www.lryc.cn/news/540852.html

相关文章:

  • 骶骨神经
  • 基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
  • 【找工作】C++和算法复习(自用)
  • 大语言模型基础
  • 深入浅出机器学习:概念、算法与实践
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 老游戏回顾:d2
  • 【深度学习】Pytorch的深入理解和研究
  • 什么是 Vue 的自定义事件?如何触发和监听?
  • windows上vscode cmake工程搭建
  • DEMF模型赋能多模态图像融合,助力肺癌高效分类
  • Android:权限permission申请示例代码
  • AI Agent Service Toolkit:一站式大模型智能体开发套件
  • 大数据SQL调优专题——Hive执行原理
  • Python程序打包 |《Python基础教程》第18章笔记
  • 图论 之 迪斯科特拉算法求解最短路径
  • 掌握Spring开发_常用注解详解
  • 华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
  • Kubernetes的Ingress和Service有什么区别?
  • 洛谷B3619(B3620)
  • vue组件,父子通信,路由,异步请求后台接口,跨域
  • 详解分布式ID实践
  • .NET + Vue3 的前后端项目在IIS的发布
  • 软件测试之压力测试
  • 矩阵-矩阵置零
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本
  • 【C# 数据结构】队列 FIFO
  • 论文笔记-WWWCompanion2024-LLM as Data Augmenters for Cold-Start Item Recommendation
  • Java 语法新特性(Records、Pattern Matching、Sealed Classes)深度解析(11/17/21)✨