多目录CMAKE文件的编写

2023-11-14

前言

  对于单文件来说一个CMakeLists.txt文件即可,但是大多数项目的文件都不可能只有一个文件,因此介绍下在多目录下CMakeLists.xtx文件是如何编写的

思考

  对于多目录CMAKE文件的编写应该怎样写呢?我们知道单目录文件只需要一个CMakeLists.txt文件即可,那么多目录是不是应该有多个CMakeLists.txt文件?
  是的多目录CMAKE文件在每个目录都有一个CMakeLists.txt文件并且还有一个根目录下的CMakeLists.txt文件,通过根目录下的CMakeLists.txt来链接各个目录下的CMakeLists.txt.

准备

  首先准备下需要的文件

  然后编写各个文件的代码(将以静态库方式进行连接)

  • 根目录cmake
cmake_minimum_required(VERSION 3.25)
project(test)

#包含各个目录的头文件
include_directories(${PROJECT_SOURCE_DIR}/Game)
include_directories(${PROJECT_SOURCE_DIR}/Login)
include_directories(${PROJECT_SOURCE_DIR}/Register)
include_directories(${PROJECT_SOURCE_DIR}/Window)

#连接子目录的CMakeLists.txt文件
add_subdirectory(Game)
add_subdirectory(Login)
add_subdirectory(Register)
add_subdirectory(Window)

#连接静态库
link_libraries(Game)


#生成可执行文件
add_executable(game main.cpp)

  • Window目录Cmake文件
cmake_minimum_required(VERSION 3.25)
project(Window)

#搜索源文件
aux_source_directory(./ SRC)

#编译静态库文件

add_library(Window ${SRC})
  • Login目录Cmake文件
cmake_minimum_required(VERSION 3.25)
project(Login)

#搜索源文件
aux_source_directory(./ SRC)

#编译静态库文件

add_library(Login ${SRC})
  • Register目录Cmake文件
cmake_minimum_required(VERSION 3.25)
project(Register)

#搜索源文件
aux_source_directory(./ SRC)

#编译静态库文件

add_library(Register ${SRC})
  • 各个cpp文件
#include "game.h"

void start()
{
    createWindow();
    register_Account();
    login();
    while (true)
    {
        play();
        system("pause");
    }
}

void play()
{
    std::cout << "开始游戏 " << std::endl;
}
#include "login.h"

void login()
{
    std::cout << "登录" << std::endl;
}
#include "register.h"

void register_Account()
{
    std::cout << "注册账号" << std::endl;
}
#include "window.h"

void createWindow()
{
    std::cout << "创建游戏窗口" << std::endl;
}

开始构建

  在当前终端下输入cmake -B build 生成build目录以及相关文件
在这里插入图片描述
  然后输入cmake --build build
在这里插入图片描述
可以看到相应的lib文件和可执行文件已经生成
进入Debug目录执行可执行文件
在这里插入图片描述
可以看到程序已经正常执行,此时就是把除main.cpp文件以外的cpp文件删除也能正常运行,因为其他cpp文件已被打包为了静态库加载到可执行程序里了
在这里插入图片描述
在这里插入图片描述
可以看到其他cpp文件已被删除
运行程序
在这里插入图片描述

结语

  本次记录了如何编写多目录下cmake文件的编写,对于其他cpp文件在生成静态库以后可删可不删,不会影响程序的运行.

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

多目录CMAKE文件的编写 的相关文章

随机推荐

  • DDPMs扩散模型Pytorch代码实现附详细注释

    本文相当于是对The Annotated Diffusion Model的代码理解后加的注释 很详尽 具体有些公式图片不太好显示 在vx公众号 一蓑烟雨晴 回复 100 下载notebook版本的代码文件 import math from
  • 多目标跟踪笔迹十三:Learning by tracking Siamese CNN for robust target association

    1 Introduce 本文介绍了一种在行人跟踪背景下处理数据关联任务的新方法 引入了一种两阶段学习方案去匹配 检测对 首先 对 Siamese 卷积神经网络 CNN 进行了训练 以学习描述两个输入图像块之间的局部时空结构 聚合像素值和光流
  • 安装Ambari 2.7.5 + HDP3.1.5(附安装包)

    目录 前置准备 1 安装包准备 2 服务器配置 3 配置静态IP 4 配置主机名 5 关闭防火墙及selinux 6 配置ssh互信 7 安装pssh工具 非必须 8 配置ntp时钟同步 9 设置swap 10 关闭透明大页面 11 安装h
  • ubuntu创建自己的git远程仓库

    准备工作 先弄来一个服务器 可以先自行租赁一个服务器例如华为云 阿里云 腾讯云等等 这些服务器都可以哪个便宜就选择哪个吧 然后安装一个ubuntu的系统 这边我自用的是ubuntu系统 其他的系统没用搭建过 如果是Linux的系统大致都一样
  • 人工智能汇总---政策-应用--技术

    2017 8 2018 6月 那些脑袋迷糊的日子 不知啥是人工智能 接下来一步一步去了解 从大政策 到媒体 企业 学校 自己动手 逐步对人工智能有个初步的了解 下面对精华网址汇总 供有共同爱好的学习 讨论群 366244662 2017 8
  • VASP输入INCAR文件

    欢迎来到我的博客 坚持比努力重要 文章目录 欢迎来到我的博客 坚持比努力重要 目录 VASP输入INCAR文件 初始I O设置 读入 读出 Electronic Relaxation 电子步 Ionic Relaxation 离子步 Pol
  • Arduino使用Esp32-cam开发版

    首先你需要先准备一些硬件 1 Esp32 Cam开发版 2 TY OV2640 v2 0摄像头 3 烧录底座 可以用USB TTL 我用的是Esp8266的烧录底座 4 杜邦线母线x5 颜色不做要求 开始填坑 贴个大佬的玩法 如果你在开发版
  • 获取outputstream大小_java从输入流中获取数据并返回字节数组示例

    代码如下 import java io ByteArrayOutputStream import java io InputStream 从输入流中获取数据并以字节数组返回 public class StreamTool 从输入流获取数据
  • 神州网信政府版win10远程

    今天去客户公司部署系统 本来想着开好远程后马上回来远程操作 哪知道客户服务器安装的是 神州网信政府版win10远程 遇到一堆问题 处理了半天 记录下 1 参考 Windows10神州网信版的远程桌面开启 神州网信 远程桌面 dawn的博客
  • Using the SG3525 PWM Controller - Explanation and Example: Circuit Diagram / Schematic of Push-Pull

    5 Using the SG3525 PWM Controller Explanation and Example Circuit Diagram Schematic of Push Pull Converter PWM is used i
  • 【前端】Vue项目:旅游App-(1)搭建项目、重置css、配置router和store(pinia)

    文章目录 创建项目 搭建和配置项目 项目目录结构划分 重置CSS normalize css reset css 目录结构 配置router 对应页面组件 index js 配置store 创建项目 npm init vue latest
  • Markdown 公式编号及引用

    举一个简单的例子 前提条件是使用 mathjax 作为 LaTeX 渲染工具 Suppose we solve equations mathcal L U F tag 1 label eq1 In the equation eqref eq
  • Qt框架概述

    Qt框架概述 一 什么是Qt 二 了解QtCreator 三 创建Qt项目 Qt项目框架及文件介绍 四 设置窗口属性 五 按钮 创建按钮方式一 按钮属性设置 创建按钮方式二 六 对象模型 一 什么是Qt 概念 Qt是一个基于C 的 跨平台的
  • [指针八]有关指针的面试题

    有关指针的经典面试题 C语言为何如此长寿并实用 C 为什么有那么多精彩 指针可以说是C C 中的灵魂所在 虽然早期中pascal也有指针 但是和C C 比起来不是一个级别的 今天为大家深入浅出的解析一下指针的有关笔试 面试题 所有题目来源网
  • 十三、Redis——最佳实践(Redis时参考的经验总结)

    目录 1 Redis健值设计 1 1 优雅的key结构 1 2 拒绝BigKey 1 2 1 BigKey的危害 1 2 2 如何发现BigKey 1 2 3 如何删除BigKey 1 3 恰当的数据类型 编辑 总结 2 批处理优化 2 1
  • R语言第五次实训,dplyr 、tidyr和lubridate处理数据

    题目1 1 数据处理 只用SY 20150401 csv 将数据处理成每条数据处于一天中的第几个5分钟 说明 00 00 01在第一个5分钟内 00 10 13 在第三个5分钟内 由于一天可能多次乘坐地铁 根据卡号和进站时间 查询最近出站的
  • 软复位与硬复位

    软复位与硬复位 1 软复位与硬复位 软复位信号名称中通常包含soft 硬复位信号名称中通常包含hard 软复位 常用于复位逻辑模块 硬复位 常用于配置寄存器模块 配置信号同步模块 硬复位有效会驱动软复位有效 一个模块出现问题时 可以使其软复
  • 物联网实训总结——简易的智能农场

    物联网实训总结 简易的智能农场 一 场景需求 1 农场环境监测 对农场的环境实现智能感知 对温度 湿度 光照值实时显示 同时检测农场烟雾状态 判断火情 实时监控农场人员出现情况 2 控制管理 智能农场控制部分分为 通风系统和补光系统 实现对
  • PAT Basic Level 1002 写出这个数

    import java util Scanner author djch date 2021 5 21 public class Main public static void main String args Scanner scanne
  • 多目录CMAKE文件的编写

    前言 对于单文件来说一个CMakeLists txt文件即可 但是大多数项目的文件都不可能只有一个文件 因此介绍下在多目录下CMakeLists xtx文件是如何编写的 思考 对于多目录CMAKE文件的编写应该怎样写呢 我们知道单目录文件只