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的开发者必备的技能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 的引导与服务控制

一 开机启动过程 bios加电自检-->mbr-->grub-->加载内核文件-->启动进程 1 bios家电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 2 mbr 因为grup太大,第一个扇区存不下所有的grub程序&#xff0c;所以分为2部分指…

视频剪辑高手实战:批量置入随机封面,高效制作

随着数字媒体时代的到来&#xff0c;视频内容已成为日常生活中不可或缺的一部分。无论是社交媒体、新闻、教育还是娱乐&#xff0c;视频都以其独特的魅力吸引着眼球。高质量的视频内容要经过精细的剪辑和包装。现在来讲解云炫AI智剪如何通过批量置入随机封面&#xff0c;高效制…

鸿蒙HarmonyOs:为什么不支持热更新?

学习了一段时间的鸿蒙开发&#xff0c;发现鸿蒙开发还是比较简单的&#xff0c;今天突然心血来潮&#xff0c;研究了一下鸿蒙热更新&#xff0c;最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言&#xff0c;ArkTs又是基于TypeScript语言的&#xff0…

Linux network — 网络层收发包流程及 Netfilter 框架浅析

Linux network — 网络层收发包流程及 Netfilter 框架浅析 1. 前言2. 基础网络知识2.1 网络分层模型2.2 数据包协议分层2.3 sk_buff 结构2.4 收发包整体框架 3. 网络层&#xff08;IPv4&#xff09;收发包流程4. Netfilter 框架4.1 IPv4 网络层的 Netfilter Hook 点4.2 iptable…

Java基础-----集合类(二)

文章目录 1. 泛型简介2. 使用泛型的好处3.使用泛型3.1 泛型类3.2 泛型接口3.3 泛型方法 4 泛型的通配符4.1 <?>&#xff1a;无边界的通配符4.2 <? extends E>&#xff1a;固定上边界的通配符4.3 <? super E>&#xff1a;固定下边界的通配符 5.总结 今天主…

Invalid bound statement (not found)异常解决方案归纳

一、包名映射不对&#xff08;新建多级mapper文件夹引起的&#xff0c;解决方案在下面链接有详细解释&#xff09; Invalid bound statement (not found)异常解决_invalid bound statement (not found): com.ruoyi.map-CSDN博客 二、mapper.xml中的namespace和实际的mapper文…

软考证书学下来,对找工作有哪些帮助?

“软考&#xff1f;真的别考”。 “考了半天&#xff0c;到过期了还能没用上&#xff0c;hr根本不看”。 我在豆瓣上看着网友们的评论&#xff0c;心中五味杂陈。 每年有超过100万人参加的考试&#xff0c;却被人吐槽说一无是处&#xff1f; 这种国家级认证的考试&#xff0…

小白也能看得懂的Jmeter性能测试中服务端资源监控技术

操作步骤&#xff1a; 1、安装插件管理器 插件管理器的作用&#xff1a;可以提供扩展插件的在线安装升级和卸载。因为我们需要在线安装监控插件&#xff0c;首先我们就要先安装插件管理器。 插件管理器的下载地址&#xff1a;https://jmeter-plugins.org/install/Install/ 如…

【论文笔记】An Extractive-and-Abstractive Framework for Source Code Summarization

An Extractive-and-Abstractive Framework for Source Code Summarization 1. Introduction2. Model2.1 Overview2.2 Training of EACS2.2.1 Part i : Training of Extractor2.2.2 Part ii : Training of Abstracter 3. Evaluation 1. Introduction 代码摘要可以细分为抽取式代…

LeetCode2.AddTwoNumbers两数相加(Java可运行,带测试用例)

一、题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

十大性能测试工具

这篇关于“性能测试工具”的文章将按以下顺序让您了解不同的软件测试工具&#xff1a; 什么是性能测试&#xff1f;为什么我们需要性能测试&#xff1f;性能测试的优势性能测试的类型十大性能测试工具 什么是性能测试&#xff1f; 性能测试是一种软件测试&#xff0c;可确保…

OpenFeign相关面试题及答案(2024)

1、什么是OpenFeign&#xff0c;它如何简化远程服务调用&#xff1f; OpenFeign是一个声明式的Web服务客户端&#xff0c;它使得编写HTTP客户端变得更加容易。它属于Spring Cloud Netflix项目的一部分&#xff0c;可以与Spring Boot应用轻松集成。通过使用OpenFeign&#xff0…

Python数据挖掘与机器学习实践技术应用

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…

金融追梦者,向着春天出发——社科院与美国杜兰大学金融管理硕士

随着时代的进步和社会的变迁&#xff0c;教育已经不再是单纯的学生时代的事情&#xff0c;而是贯穿人的一生。特别是在金融行业&#xff0c;由于其变幻莫测的特性&#xff0c;在职继续攻读硕士学位的人越来越多。他们希望通过进一步的学习和研究&#xff0c;提升自己的专业素养…

网络安全行业必考证书(NISP/CISP)

&#x1f50d; 网络安全行业需要考哪些证书&#xff1f; &#x1f4dd; 在网络安全行业&#xff0c;证书是非常重要的敲门砖。拥有一定的证书可以证明你具备相关的知识和技能&#xff0c;能够胜任相关的工作&#xff0c;对于企业投标也能更方便些。 &#x1f4dd;当之无愧的必然…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT&#xff1a;李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的&#xff0c;也就是 Sequence to Sequence…

IO进程线程 day4 文件IO与目录操作

1.使用标准IO完成两个文件拷贝 #include <head.h> int main(int argc, const char *argv[]) {//判断输入是否合法if(argc>3){printf("输入不合法\n");return -1;}//定义两个文件指针&#xff0c;用于读写FILE *fp1NULL;FILE *fp2NULL;if((fp1fopen(argv[1]…

ASP.Net实现海鲜添加(三层架构,异常处理)

演示功能&#xff1a; 点击启动生成页面 点击添加跳转新界面 此处设置文本框多行 点击Button添加 步骤&#xff1a; 1、建文件 下图是三层架构列表&#xff0c;Models里面有模拟数据库中列的类&#xff0c;DAL中有DBHelper和service,BLL中有BllManager文件用于ui界面直接调用…

FreeRTOS——信号量知识点总结及二值信号量实战

1信号量概念 1&#xff09;信号量的计数值都有限制&#xff1a;限定最大值。 如果最大值被限定为1&#xff0c;那么它就是二值信号量&#xff1b; 如果最大值不是1&#xff0c;它就是计数型信号量。 2&#xff09;当计数值大于0&#xff0c;代表有信号量资源 当释放信号量&…

模型融合之模型堆叠

一、理论 模型堆叠&#xff08;Model Stacking&#xff09;是一种集成学习的方法&#xff0c;其本质是将多个基学习器&#xff08;Individual Learner&#xff09;的预测结果作为新的特征&#xff0c;再训练一个元学习器&#xff08;Meta Learner&#xff09;来进行最终的预测。…