【Cmake】在Windows下用Cmake构建C++工程项目——cmake 的 helloworld——1

2023-05-16

参考资料:《Cmake 实践》   Cmake Practice   --Cjacker

Cmake 实践,是在Linux系统环境下讲解的,有些地方在Windows下看不到该有的效果,而且第一节因为给出的代码有点小问题,所以也运行不成功,所以我重新在Windows环境下,自己整理一下。

0. 准备工作之前的准备

Cmake工具自己安装好吧,这就不用教了吧!!!

https://cmake.org/files/

1. 准备工作

首先,建立一个文件夹t1存放我们第一个工程,我的文件夹路径是D:\vs_test\cmake_test\t1。以后我们新建工程都会放在D:\vs_test\cmake_test这个目录下。

然后,在 t1 目录下建立 t1.cpp CMakeLists.txt(注意文件名大小写):

t1.cpp文件内容:

#include <iostream>
 
int main()
{
    std::cout << "Hello World from t1 Main!\n";
    while (1);
}

CMakeLists.txt文件内容:

PROJECT (HELLO)
SET(SRC_LIST t1.cpp)
MESSAGE(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR}) 
MESSAGE(STATUS "This is SOURCE dir "${PROJECT_SOURCE_DIR})
ADD_EXECUTABLE(Qt ${SRC_LIST})

注意:在《Cmake 实践》里面,CMakeList.txt文件最后一句话是

ADD_EXECUTABLE(hello SRC_LIST)

这里是写错了,应该是 ADD_EXECUTABLE(hello ${SRC_LIST})

否则,编译出错。我就是一开始编译出错,导致后面没心思学,过了一段时间又重新开始学,影响学习的积极性。

2. 开始构建

在 t1 目录下建立build文件夹。

打开Cmake,选择好源文件路径和编译生成路径,依次点击Config、Generate。如下图。

会看到 Config done、Generate done,说明构建成功。

打开build文件看看内容,发现已经生成了工程HELLO.sln

打开工程,运行一下,打印结果为:

恭喜您,到这里为止您已经完全掌握了 cmake 的使用方法。

3. 语法解释

PROJECT (HELLO)
SET(SRC_LIST t1.cpp)
MESSAGE(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR}) 
MESSAGE(STATUS "This is SOURCE dir "${PROJECT_SOURCE_DIR})
ADD_EXECUTABLE(Qt ${SRC_LIST})

Cmake的语法规则,指令是大写小写都一样,参数和变量是大小写相关的。
我们这里指令就统一用大写,看起来高端一点(#^.^#)

PROJECT (HELLO)

PROJECT 指令,可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,默认情况表示支持所有语言。我们工程就叫做HELLO。从结果的名字HELLO.sln就可以看出。这个指令隐式的定义了两个 cmake 变量:<projectname>_BINARY_DIR 以及<projectname>_SOURCE_DIR,这里就是HELLO_BINARY_DIRHELLO_SOURCE_DIR
HELLO_BINARY_DIR:是编译目录,即  D:/vs_test/cmake_test/t1/build   

HELLO_SOURCE_DIR是源文件目录,即  D:/vs_test/cmake_test/t1

SET(SRC_LIST t1.cpp)

SET指令,可以用来显式的定义变量。                                                                                           如果有多个源文件,也可以定义成:SET(SRC_LIST main.c   t1.c   t2.c)

MESSAGE(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR})

MESSAGE 指令,SATUS 是指输出前缀为—的信息。

ADD_EXECUTABLE(Qt  ${SRC_LIST})

定义了这个工程会生成一个文件名为 Qt 的可执行文件。相关的源文件是 SRC_LIST 中
定义的源文件列表。你也可以直接写成 ADD_EXECUTABLE(hello main.c)。

在本例我们使用了${}来引用变量,这是 cmake 的变量应用方式,但是,有一些例外,比
如在 IF 控制语句,变量是直接使用变量名引用,而不需要${}。

将本例改写成一个最简化的 CMakeLists.txt:

PROJECT(HELLO)
ADD_EXECUTABLE(Qt  main.c)

转自

【Cmake】在Windows下用Cmake构建C++工程项目——cmake 的 helloworld——1_wolves_liu的博客-CSDN博客_cmake创建c++工程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Cmake】在Windows下用Cmake构建C++工程项目——cmake 的 helloworld——1 的相关文章

  • 远程登录阿里云服务器时,提示Permission denied, please try again.

    在使用ssh命令 xff0c 远程登录阿里云服务器时 xff0c 提示Permission denied please try again 百分之九十的可能 xff1a 你的密码错了 xff01 你需要注意的是 xff0c 我们的实例有两个
  • 为什么使用token?session与token的区别

    目录 一 session的状态保持及弊端 二 token认证机制 一 session的状态保持及弊端 当用户第一次通过浏览器使用用户名和密码访问服务器时 xff0c 服务器会验证用户数据 xff0c 验证成功后在服务器端写入session数
  • 在线加密解密工具

    http tool oschina net encrypt 一个在线加解密工具 xff0c 界面如图 xff1a
  • Django到底是MVC还是MVT?以及MVC和MVT的区别

    最近一直被一些问题所困惑 xff1a Django是遵循MVC还是MVT xff1f MVC和MVT到底有哪些区别 xff1f MVC可以继续拆分吗 xff1f 在网络上浏览了很多无关痛痒的文章 xff0c 无非是M V C分别代表什么 x
  • 【Python】使用Counter方法统计字符串每个字符出现的次数

    from collections import Counter a 61 34 a lskdh 96 foiegn 96 96 as ldnf asd 121 2ljladsfkja 96 sdijfhaosjlfd gjsdfg as d
  • 【Python】时间戳的格式化输出

    将当前时间按照 2019 02 25 10 xff1a 26 xff1a 55 输出 xff1a import datetime now time 61 datetime datetime now strftime 34 Y m d H M
  • 【Python】输出给定范围内的所有素数

    质数 xff08 prime number xff09 又称素数 xff0c 有无限个 质数定义为在大于1的自然数中 xff0c 除了1和它本身以外不再有其他因数 首先定义一个空列表用来存放所有的素数 sushu 61 遍历给定的范围 xf
  • Java 通过map构造树形结构

    在开发中 xff0c 经常会有将 数据组装成为树形结构的场景 xff0c 除了可以通过递归实现 xff0c 还可以通过map 组装实现 一 xff0c 构造基本数据 import apple laf JRSUIUtils import co
  • 【无标题】es搜索基本操作

    一 xff0c 准备数据 1 创建索引 PUT lagou book 2 创建mapping PUT lagou book doc mapping 34 properties 34 34 description 34 34 type 34
  • ubuntu 环境使用eclipse和JLink对uboot进行调试

    ubuntu 12 04 Jlink v8 Jlink Linux v422a tar gz Linux J Link ARM V4 34 Windows 下载eclipse C C 43 43 版本 http www eclipse or
  • 【ES】常用操作工具

    工欲善其事 xff0c 必先利于器 xff0c es使用过程中 xff0c 有些工具能帮助我们快速的上手和使用 一 es head es head 是一款专门针对 es的客户端工具elasticSearch配置包 是一个基于node js的
  • 【es】基本概念理解

    一 xff0c 初识es 1 是什么 xff1f ElasticSearch 简称es 开源的分布式的全文搜索引擎 xff0c 可以近乎实时的存储检索数据 xff0c es使用java开发 xff0c 并且使用Lucene作为核心实现搜索功
  • 无法安装net framework 3.5 的解决方法

    电脑刚重装了Windows8 1系统 xff0c 然后安装数据库的时候 xff0c 却出现了这样的问题 xff1a 您的电脑上的应用需要使用以下windows功能 问题原因是 xff1a 在安装系统的时候 xff0c NET Framewo
  • 【计算机网络原理】第四章 数据链路层

    今天主要梳理了一下数据链路层的内容 xff0c 如下 一 宏观规划 综合数据链路层的整体 xff0c 分为两大部分 xff0c 第一部分讲解数据链路层的功能 xff0c 第二部分讲解数据链路层的功能 这些协议 xff0c 其实还是为了实现数
  • 【redis】关系型数据库 VS 非关系型数据库

    一 关系型数据库 xff1f 1 概念 关系型数据库是指采用了关系模型来组织数据的数据库 简单来说 xff0c 关系模式就是二维表格模型 主要代表 xff1a SQL Server xff0c Oracle Mysql PostgreSQL
  • resultful风格接口

    一 产生背景 网络应用程序 xff0c 越来越流行前端和后端的分离设计 当前的发展趋势是前端的设计层出不穷 比如 xff1a 各种型号的手机 平板灯其他设计 因为必须要一种统一的机制方便不同的前端和后端进行通信 这就导致了API结构的流行
  • 【kafka】Exception thrown when sending a message with key='null' and payload='lizhenjuan;99' to topic

    今天碰到一个奇怪的问题 xff0c 如下图 xff1a 一 问题 1 问题截图 上午还可以发送消息成功的 xff0c 下午突然就发送不了消息了 我就检查我代码的问题 xff0c 是传递的格式不对 xff0c 还是数据要求不对 网上的资料显示
  • 【mysql】order by多个字段排序

    今天遇到了两个字段排序的问题 xff0c 感觉不是很清晰 xff0c 所有又按照规则查询了下 xff0c 总结下 count都是306的有三个 现在需要同时按照age和count排序 xff0c 测试最后的排序结果 默认都是按照age和co
  • PCB Layout软件分析对比(AD、Pads、Allegro)

    PCB Layout软件分析对比 xff08 AD Pads Allegro xff09 国内的EDA软件市场几乎被三家瓜分 xff0c 分别是Altium Cadence Mentor xff0c 也是我们这次主要分析和比较的软件 除此之
  • 【leetcode学习笔记】leecode是什么?

    在csdn上看到leecode是第二次了 xff0c 之前一直不知道是什么 xff1f 今天在学习linux系统如何将文本登录界面转换为图像登录界面的时候 xff08 出现了运行startx后 xff0c ubuntu密码正确也进不去系统的

随机推荐