首页 > 编程语言 >CMake 构建 C++ 项目

CMake 构建 C++ 项目

时间:2024-08-13 19:48:45浏览次数:12  
标签:CMake 项目 编译成 C++ 生成 编译 VS 构建 cmake

使用 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文件的变化,一旦发生变化,它会告诉编译器重新构建整个工程环境;

标签:CMake,项目,编译成,C++,生成,编译,VS,构建,cmake
From: https://www.cnblogs.com/Jeffxu/p/18357597

相关文章

  • Jenkins配置分布式构建环境——添加固定Agent并使用JNLP启动Agent详解
    1、概述在《Jenkins部署架构概述 》这篇博文中对Jenkins部署架构进行了讲解。对于分布式架构,Jenkins包括固态Agent和动态Agent两种方案。固定Agent(常用于虚拟机):Agent容器一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。动态Agent(常用于K8s):构建......
  • 【自用10.2】C++结构体-指向结构体的指针&使用结构体传递值
    指向结构体的指针#include<stdio.h>#include<stdlib.h>#include<string.h>struct_friend{charname[32];charsex;//m-男f-女intage;};intmain(void){struct_friendgirl={"小珑",'f',18};stru......
  • 【自用11.】C++枚举
    概念当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 枚举类型的定义enum枚举名{枚举元素1,枚举元素2,……};//例如e......
  • 第18 章探讨 C++新标准 移动构造函数解析,强制移动
    第18章探讨C++新标准移动构造函数解析,强制移动第18章探讨C++新标准移动构造函数解析,强制移动文章目录第18章探讨C++新标准移动构造函数解析,强制移动18.2.5强制移动程序清单18.3stdmove.cpp18.2.5强制移动移动构造函数和移动赋值运算符使用右值。如果......
  • 城市信息模型:构建未来智慧城市之基底座
    在智慧城市的宏大叙事中,城市信息模型(CityInformationModel,CIM)平台如同城市智能的神经中枢,将数据、空间与技术深度融合,为城市规划、管理、服务、居民生活提供了前所未有的洞察与优化途径。CIM平台的构建不仅是技术的集成,更是智慧城市的灵魂,它以三维可视化、数据驱动、实时交......
  • C/C++指针无关联,因为它指向已销毁的实例
    一、概述在使用Qt+OpenCV做项目的过程中,发现一个问题。指针无关联,因为它指向已销毁的实例产生这个问题的代码如下:constchar*GLSquareWindow::readFileToString(QStringresPath){QFilevertexShaderFile(resPath);if(!vertexShaderFile.open(QIODev......
  • 详解C++的四大特性(封装,继承,多态,抽象)
    C++的四大特性是面向对象编程(OOP)的核心概念,分别是封装、继承、多态和抽象。这些特性共同构成了C++作为面向对象编程语言的基础。1.封装(Encapsulation)概念:封装是将数据和操作数据的方法绑定在一起,限制对数据的直接访问。通过将数据隐藏在类内部,只暴露必要的接口(如public成......
  • 直播预约丨《指标体系建设实战》第五期:指标体系构建方法与案例分享
    指标是反映企业的各项核心业务活动、管理成效的数据体系,指标体系作为联结业务逻辑与数据实体的关键桥梁,是构建高质量数据统计的基础单元,并在量化业务绩效和效果评估中扮演着核心角色。为了更好地服务于客户并提供切实可行的实践指导,自4月24日起,袋鼠云将推出全新《指标体系建设实......
  • C++面试
    1.讲一讲封装、继承、多态是什么?封装:将具体实现过程和数据封装成一个类,只能通过接口进行访问,降低耦合性,使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块。意义:保护或防止代码在无意之中被破坏,保护类中的成员,不让类中以外的程序直接访问或者修改,只能通过提供的公共接......
  • C++静态函数
    由于本人C++小白,关于C++的很多基础概念都不太理解,在工作当中遇到了静态函数,在函数的使用和调用外部函数与普通函数还是非常不一样的,故这里向AI请教,简单做个记录。AI的回答内容如下:Yousaid:C++当中静态函数的优势是什么ChatGPTsaid:在C++中,静态函数(static函数)是指通过在函......