CMake入门教程【核心篇】添加应用程序(add_executable)

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

        • 1. 概述
        • 2. 使用方法
          • 2.1 基本语法
          • 2.2 添加单个源文件
          • 2.3 添加多个源文件
        • 3. 完整代码示例
        • 4. 实战使用技巧
        • 5. 注意事项
        • 6. 总结与分析

开始CMake配置
使用add_executable
指定可执行文件名和源文件
单个源文件
多个源文件
创建可执行目标
设置目标属性
完成CMake配置
1. 概述

add_executable是CMake中用于添加可执行文件的基本命令。该命令将源代码文件编译成可执行程序,是CMake项目中不可或缺的一部分。

2. 使用方法
2.1 基本语法
add_executable(<executable_name> [source1] [source2 ...])
  • <executable_name>: 可执行文件的名称。
  • [source1] [source2 ...]: 源代码文件列表。
2.2 添加单个源文件
add_executable(myApp main.cpp)
2.3 添加多个源文件
add_executable(myApp main.cpp util.cpp util.h)
3. 完整代码示例

以下是一个简单的示例,演示了在CMake项目中如何使用add_executable来创建一个简单的可执行程序。

  • 项目结构

    cssCopy codeMyProject/
    ├── CMakeLists.txt
    └── src/├── main.cpp└── util.cpp
    
  • CMakeLists.txt

    cmake_minimum_required(VERSION 3.10)
    project(MyApp)add_executable(myApp src/main.cpp src/util.cpp)
    
  • src/main.cpp

    #include <iostream>
    #include "util.h"int main() {std::cout << "Hello, CMake!" << std::endl;printUtil();return 0;
    }
    
  • src/util.cpp

    #include "util.h"
    #include <iostream>void printUtil() {std::cout << "Utility function." << std::endl;
    }
    
4. 实战使用技巧
  • 源文件管理:对于大型项目,使用变量或源文件列表来管理多个源文件。
  • 条件编译:根据不同条件(如平台或配置)添加不同的源文件或定义。
  • 目标属性设置:使用target_*命令设置可执行目标的属性,如target_include_directories设置包含目录。
5. 注意事项
  • 文件路径:确保源文件的路径正确无误。
  • 可执行文件命名:避免与系统命令或其他项目中的可执行文件冲突。
  • 跨平台兼容性:考虑源代码在不同平台上的兼容性。
6. 总结与分析

add_executable命令是CMake项目中构建可执行程序的基石。通过合理使用此命令,可以灵活地管理源代码文件并生成所需的可执行目标。了解和掌握add_executable的使用是每个使用CMake的开发者必备的技能。

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

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

相关文章

ARM Cortex-A学习(3):MMU内存管理单元

内存管理单元(MMU)负责虚拟地址到物理地址的转换。MMU通过翻译表将程序使用的虚拟地址映射到实际的物理内存位置&#xff0c;实现对内存的动态管理和隔离。这不仅允许更灵活的内存分配&#xff0c;还提高了系统的安全性和稳定性。了解MMU的工作原理对于开发底层代码、BootLoade…

k8s---Pod的生命周期

Pod是什么&#xff1f; pod是k8s中最小的资源管理组件。 pod也是最小化运行容器化应用的资源管理对象。 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合 在一个pod当中运行一个容器是最常用的方式 在一个pod当中可以同时运行多个容器&#xff0c…

【数据结构】二叉树的创建和遍历:前序遍历,中序遍历,后序遍历,层次遍历

目录 一、二叉树的定义 1、二叉树的定义 2、二叉树的五种形态 二叉树的子树 &#xff1a; 3、满二叉树与完全二叉树 4、二叉树的性质 5、二叉树的存储结构 1、顺序存储 ​编辑 2、链式存储 二、二叉树的遍历 按照前序序列构建二叉树 1、前 (先) 序遍历(Preorder …

神经网络:激活函数的介绍

神经网络的激活函数是一种非线性函数&#xff0c;它被应用于每个神经元的输出&#xff0c;以引入非线性性质到网络中。 激活函数的目的是将输入转换为输出&#xff0c;并且将输出限制在特定的范围内。它们非常重要&#xff0c;因为线性变换&#xff08;例如加法和乘法&#xf…

【UEFI基础】EDK网络框架(环境配置)

环境配置 为了能够让使用测试BIOS的QEMU与主机&#xff08;就是指普通的Windows系统&#xff0c;我们使用它来编译BIOS和启动QEMU虚拟机&#xff09;通过网络连接&#xff0c;需要额外的配置。 首先是下载和安装OpenVPN&#xff08;这里安装的是OpenVPN-2.5.5-I601-amd64.msi…

重新认识一下 vue3 应用实例

重新认识一下 vue 应用实例 &#x1f495; 创建应用实例 每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例 应用实例必须在调用了 .mount() 方法后才会渲染出来。该方法接收一个“容器”参数&#xff0c;可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串 //…

【GoLang入门教程】Go语言几种标准库介绍(四)

编程语言的未来&#xff1f; 文章目录 编程语言的未来&#xff1f;前言几种库fmt库 (格式化操作)关键函数&#xff1a;示例 Go库标准库第三方库示例 html库(HTML 转义及模板系统)主要功能&#xff1a;示例 总结专栏集锦写在最后 前言 上一篇&#xff0c;我们介绍了debug、enco…

魔术表演Scratch-第14届蓝桥杯Scratch省赛真题第1题

1.魔术表演&#xff08;20分&#xff09; 评判标准&#xff1a; 4分&#xff1a;满足"具体要求"中的1&#xff09;&#xff1b; 8分&#xff1a;满足"具体要求"中的2&#xff09;&#xff1b; 8分&#xff0c;满足"具体要求"中的3&#xff09…

GPU的硬件架构

SM: streaming Multiprocessor 流多处理器 sm里面有多个(sp)cuda core 32个线程称为一个warp&#xff0c;一个warp是一个基本执行单元 抽象概念&#xff1a;grid 网格 block 块 thread 线程 块中的线程大小是有讲究的&#xff0c;关乎到资源的调度&#xff0c;一般是128&#x…

关于“Python”的核心知识点整理大全59

目录 19.3.2 将数据关联到用户 1. 修改模型Topic models.py 2. 确定当前有哪些用户 3. 迁移数据库 注意 19.3.3 只允许用户访问自己的主题 views.py 19.3.4 保护用户的主题 views.py views.py 19.3.6 将新主题关联到当前用户 views.py 往期快速传送门&#x1f44…

是否还在 Docker 中跑 MySQL?

容器的定义&#xff1a;容器是为了解决“在切换运行环境时&#xff0c;如何保证软件能够正常运行”这一问题。 目前&#xff0c;容器和 Docker 依旧是技术领域最热门的词语&#xff0c;无状态的服务容器化已经是大势所趋&#xff0c;同时也带来了一个热点问题被大家所争论不以…

[DevOps-02] Code编码阶段工具

一、简要说明 在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装安装GitLab配置GitLab登录账户二、Git安装 Git官网 Githttps://git-scm.com/

卫星互联网与MEC融合方案研究

卫星互联网与MEC融合方案研究 作者&#xff1a;温特、王立中、司鹏、颜明明、马恬、郭伊蒙 中国卫通集团股份有限公司 本文首发&#xff1a;第十九届卫星通信学术年会 摘 要&#xff1a;在卫星互联网中引入移动边缘计算(MEC)技术可有效提高用户体验质量&#xff0c;降低运营成…

jQuery文件下载方法及引入HTML语法

jQuery下载 去jQuery网站下载文件包&#xff0c;点击主页的“Download”之后&#xff0c;进入下载页面&#xff0c;可以选择production版本的进行下载&#xff0c;但是点击进去之后&#xff0c;浏览器并不会直接下载相关的文件&#xff0c;而是跳转到一个“密密麻麻”都是jQue…

15.bash shell中自定义命令行选项与getopt/getopts

文章目录 linux shell 命令行选项1.命令行选项的手动实现简单选项分离命令行参数和选项带值的选项合并选项 2.使用 getopt 命令getopts命令选项标准化 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; linux shell 命令行选项 选项是跟在单…

MySQL基础篇(一)SQL

视频地址: 黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括 SQL&#xff0c;全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一 标准。 一、SQL通用语…

整数的阶乘(英语:factorial)是所有小于及等于

整数的阶乘&#xff08;英语&#xff1a;factorial&#xff09;是所有小于及等于该数的正整数的积&#xff0c;0的阶乘为1。即&#xff1a;n!123...n。 实例 #!/usr/bin/python3 # Filename : test.py # author by : www.dida100.com # 通过用户输入数字计算阶乘 # 获…

electron自定义菜单

创建menu.js const { app, Menu } require("electron"); const createMenu () > {const menu [{label: "菜单",submenu: [{label: "新增",click: () > {},}, ],},{label: "关于",submenu: [{label: "新增",click:…

Java数据结构:1. 数据结构前置知识

文章目录 一、初识数据结构二、初识集合框架1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法 三、时间复杂度空间复杂度1. 算法效率2. 时间复杂度&#xff08;1&#xff09;概念&#xff08;2&#xff09;大O的渐进表示法&#xff08;3&#xff09;推导大…

MySQL5.7用于控制副本服务器的 SQL 语句

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 13.4.2 SQL Statements for Controlling Replica Servers 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 5.7 参考手册 / ... / CHANGE M…