CMake 构建 C++ 项目

news/2024/11/17 14:24:26/文章来源:https://www.cnblogs.com/Jeffxu/p/18357597

使用 CMake 构建C++项目便于跨平台开发,在Linux上可以生成 makefile ,并通过 make来进行编译。在Windows上可以生成 .sln 项目,并结合VS继续进行开发,或 MSVC 编译器来直接将项目编译成目标文件。

1、 创建 .cpp 文件,以编译成exe程序

#include <iostream>int main()
{printf("hello word");std::cin.get();return 0;
}

2、创建 CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.18)
# 设置项目的名称
project(testDemo)
# 设置将mian.cpp文件编译成 testDemo 程序
add_executable(${PROJECT_NAME} main.cpp)

3、构建并编译对应的项目

在Windows平台上,一般结合VS编译器来将该项目编译成对应的可执行文件,有两种做法:(1)将项目构建生成VS的sln项目,然后通过VS来打开该项目进行编译。(2)不用VS来打开对应的项目,cmake 直接通过调用 msbuild 来进行编译该项目。

1)、cmake 构建.sln项目

# 首先进入到 .cpp 和CMakeLists.txt文件所在目录
mkdir build  # 创建build目录用于存放CMake 所生成的文件
cd  build    
cmake ..    # 将在build目录下生成对应的sln项目

目录结构,及以上命令会生成的VS项目如下图所示

【注意】cmake .. 生成VS解决方案,是根据本机安装的VS默认版本。如果本机安装有多个VS,此时想要生成某个指定VS版本的解决方案,就需要在生成解决方案时指定VS的版本,如生成 VS2019对应的解决方案:cmake .. -G "Visual Studio 16 2019",如下图将以指定的版本进行生成

2)、通过VS来打开 .sln 编译成可执行文件

3)、如果不需要VS来打开项目编译,可以直接使用如下命令:cmake --build . ,将会生成对应的可执行程序,如下图:


cmake 生成的 ALL_BUILD、ZERO_CHECK

ALL_BUILD :只要编译这个工程,所有的工程均会编译;
ZERO_CHECK: 监视CMakeLists.txt文件的变化,一旦发生变化,它会告诉编译器重新构建整个工程环境;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】2024无人驾驶网约车乘坐意愿调查报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37335科技迅猛发展,无人驾驶技术从科幻走进现实,2024 年无人驾驶网约车成热议话题。 阅读原文,获取专题报告合集全文,解锁文末208份无人驾驶网约车相关行业研究报告。 报告表明,近 60%受访者期待,00 后更积极,80 后较谨慎。性别上男性更…

.NET周刊【8月第1期 2024-08-04】

国内文章 EF Core性能优化技巧 https://www.cnblogs.com/baibaomen-org/p/18338447 这篇文章介绍了在代码层面上优化EF Core实例池和拆分查询的方法。首先,文章建议使用DbContext实例池来重复利用实例,避免资源浪费,并提供相关使用示例。其次,文章讨论了笛尔卡乘积对复杂查…

【视频讲解】滚动回归Rolling Regression、ARIMAX时间序列预测Python、R实现应用

原文链接: https://tecdat.cn/?p=37338 原文出处:拓端数据部落公众号 分析师:Jixin Zhong 本文将通过视频讲解,展示如何用滚动回归预测,并结合一个R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析实例的代码数据,为读者提供一套完整的实践数据分析流程。 滚动回…

25.python模块(加密,os,re,json)

一.加密讲解 加密算法: md5\rsa\AES\des\base (一)base64加解密 import base64 a=base64.b64encode(b"123456") print(a) #加密#bMTIzNDU2 b=base64.b64decode(bMTIzNDU2) print(b) #b123456http://encode.chahuo.com/ 在线加解密hashlib: md5\sha3_51\sha3_512()\s…

25.python模块(加密,os,re)

一.加密讲解 加密算法: md5\rsa\AES\des\base (一)base64加解密 import base64 a=base64.b64encode(b"123456") print(a) #加密#bMTIzNDU2 b=base64.b64decode(bMTIzNDU2) print(b) #b123456http://encode.chahuo.com/ 在线加解密hashlib: md5\sha3_51\sha3_512()\s…

java异常体系

每天坚持,终会抵达!

海康网络相机C#封装库

前言 最近做项目过程中,使用到了海康相机,官方只提供了C/C++的SDK,没有搜寻到一个合适的封装了的库,故自己动手,简单的封装了一下,方便大家也方便自己使用和二次开发 项目地址:https://github.com/martixjohn/HikvisionNetworkCameraSdkForCsharp 项目结构 ├─Dlls/ │…

我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机

我们日常使用 NFC 卡可以用来刷地铁,进出门禁,但是你有没有想过, 当我们使用一个 NFC 的 IC 卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的? 这个薄薄的 NFC 卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。 今天我在看到…

Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解

1、概述 在《Jenkins部署架构概述 》这篇博文中对Jenkins部署架构进行了讲解。对于分布式架构,Jenkins包括固态Agent和动态Agent两种方案。固定Agent(常用于虚拟机):Agent容器一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。 动态Agent…

在项目里快速运行史上最强开源大模型「Llama 3.1」

7月份,Meta正式发布迄今为止最强大的开源模型——Llama 3.1,包含了405B、70B和8B三个版本的模型。 作为开发者,如何在项目里快速运行LLaMa3.1大模型? 今天,我们结合英智未来自己的LLM推理API平台,给大家介绍一套免费实践流程。 免费使用地址:https://cognihub.baystone…

利用Jenkins Pipeline高效部署Kubernetes服务

什么是 Jenkins Pipeline Jenkins Pipeline是一种持续集成和持续交付(CI/CD)的功能,它允许开发者将复杂的构建、测试和部署流程编码为一系列称为“管道”的自动化步骤。这些步骤以Groovy脚本的形式编写,并且可以在Jenkins中可视化管理。Pipeline提供了代码化和可重用的构建…

DRM:清华提出无偏差的新类发现与定位新方法 | CVPR 2024

论文分析了现有的新类别发现和定位(NCDL)方法并确定了核心问题:目标检测器往往偏向已知的目标,忽略未知的目标。为了解决这个问题,论文提出了去偏差区域挖掘(DRM)方法,以互补的方式结合类无关RPN和类感知RPN进行目标定位,利用未标记数据的半监督对比学习来改进表征网络…