多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)

2023-05-16

实现类似于vs中工程的CMakeLists.txt的编写。功能为main.cpp调用hello.cpp 的hello()函数,world.cpp的world()函数。使用自动添加多目录下的文件,用add_library方式形成library添加进工程中,适合ubuntu环境下的cmake编译方式。

转发自:https://blog.csdn.net/ktigerhero3/article/details/70313350

1.工程目录

主文件夹helloworld下有两个文件夹,分别是hello和world,另外主文件夹下还有main.cpp文件,截图如下:

这里写图片描述

2.主函数main.cpp

#include <stdio.h>
#include "hello.h"
#include "world.h"
int main()
{
    hello();
    world();
    return 0;
}

3.顶层CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(helloworld)

# Add the source in project root directory
#aux_source_directory(. DIRSRCS)#包含主文件夹下的main.cpp文件
# Add header file include directories
include_directories(./ ./hello ./world)#添加多目录的路径
# Add block directories
add_subdirectory(hello)#添加hello文件夹中的hello库
add_subdirectory(world)#添加world文件夹中的world库
# Target
#add_executable(helloworld ${DIRSRCS})#将主文件夹下的main.cpp文件(此处只有一个CPP文件,多个CPP也是可以的)编译形成工程的可执行文件helloworld.o
add_executable(helloworld main.cpp)#上述方法有问题,这种方法才有效
target_link_libraries(helloworld hello world)#将多目录下的hello库和world库链接上可执行文件helloworld.o

4.hello文件夹

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
aux_source_directory(. DIR_HELLO_SRCS)
add_library(hello ${DIR_HELLO_SRCS})

hello.cpp

#include "hello.h"
void hello()
{
    printf("hello\n");
}

hello.h

#ifndef HELLO_H
#define HELLO_H
#include <stdio.h>
void hello();
#endif

5.world文件夹

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
aux_source_directory(. DIR_WORLD_SRCS)
add_library(world ${DIR_WORLD_SRCS})

world.cpp

#include "world.h"
void world()
{
    printf("world\n");
}

world.h

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

多目录工程的CmakeLists.txt编写(自动添加多目录下的文件) 的相关文章

  • 拓展模块使用教程和心得(五):HC08及HC系列蓝牙模块

    成就更好的自己 今天在做单片机的数据采集并给PC处理 xff0c 根据前期的想法本来是要使用nRF24L01进行的 xff0c 奈何nRF无线模块转USB接口太不给力 xff0c 因此使用到了HC08作为发送和接收数据的模块 目录 简介 内
  • ROS四旋翼无人机快速上手指南(3):工作环境文件框架与各功能包整体讲解

    成就更好的自己 这一章节主要讲解无人机平台的控制文件架构和各个功能包组成和用法 uav ws与shell源码链接 xff1a https gitee com theroadofengineers ros uav 目录 主要项目文件架构概述
  • STM32程序不运行与MicroLIB讲解

    成就更好的自己 目录 引言 什么是MicroLIB 不使用Microlib导致卡死的原理 卡死解决办法 xff1a 优化空间测评 引言 先说问题 xff0c 这几天在使用STM32H750调试程序的过程中出现了一些问题 xff0c 博主使用
  • 拓展模块使用教程和心得(7):3irobotix杉川Delta-1A激光雷达的STM32F407HAL驱动

    成就更好的自己 随着现代智能化设备程度的提高 xff0c 激光雷达已经是在智能控制与检测领域的极其常用的智能化传感器 xff0c 今天就来介绍一下3irobotix公司的Delta 1A激光雷达 Delta 1A激光雷达是一款低成本中等性能
  • RT-Thread&&STM32开发系列(2):FAT头文件包含报错与RTT和CubeMX文件兼容问题

    成就更好的自己 近期的项目需要在RTT下 xff0c 使用SD卡运行FAT文件系统 xff0c 而且还能通过USB将这个SD卡虚拟化成大容量可存储设备 xff0c 在项目初期遇到了一些小问题 xff0c 记录一下 xff0c 防止别的朋友踩
  • [已解决] RTT 串口DMA接受 开头丢失一整包的问题

    起因 项目需求需要设备通过串口的方式发送信息 xff0c STM32F4将串口的信息接收并保存到SD卡中 xff1b 通过XCOM串口助手发送文件的方式进行功能测试 xff0c 测试的时候发现总会丢弃一部分头 项目需要两路串口都保存到SD卡
  • 用实际的激光雷达和里程计运行gmapping历程

    我用的激光雷达是LMS1XX系列的 xff0c 该系列的激光雷达有ROS下的驱动程序可以到网上下载编译 里程计是自己机器人发布的信息 一开始以为自己得到了这两个信息就能运行gmapping了 xff0c 结果发现自己太天真 上网查了一下原因
  • 无数四轴的航模常识

    KV 值 无刷电机KV值定义为 转速 V xff0c 意思为输入电压增加1伏特 xff0c 无刷电机空转转速增加的转速值 例如KV1000的无刷电机 xff0c 代表电压为11V的时候 xff0c 电机的空转转速为11000转 分 KV值越
  • 5G系统的性能指标

    ITU R制定了5G系统的8个性能指标和3种应用场景 流量密度 xff1a 10Tbit s km 2 连接数密度 xff1a 10 6每平方千米 时延 xff1a 空口1ms 能效 xff1a 相对于4G xff0c 100倍提升 用户体
  • find命令用法小结

    0 前言 不管我决心如何组织文件 xff0c 似乎总有无法找到文件的时候 有时是因为我不记得最初的文件名 xff0c 其他时候 xff0c 我知道名字 xff0c 但我不记得在哪里保存它了 甚至有时我需要一个我最初就没有创建的文件 但是 x
  • 在EBAZ4205 zynq7010上运行AXI_DMA中断回环测试

    在EBAZ4205 zynq7010上运行AXI DMA loop interrupt 整体的布局图 这是上面的一张接口图 下面对每个模块附上截图 AXI DMA的输出mm2s introut s2mm introut接到PS系统的中断触发
  • http 方式请求pos请求和get请求,认证方式 用户名密码

    利用apache包请求get和post请求 xff0c 用户名和密码认证 xff0c 用户名密码填则认证 xff0c 不填测不认证 利用maven构建项目 需要导入一个包 lt dependency gt lt groupId gt org
  • jenkins部署jar包到远程服务器

    jenkins部署jar包到远程服务器 1 安装Publish Over SSH插件2 配置ssh以及jenkins的ssh配置3 jenkins任务的配置4 总结 一 xff0c 安装Publish Over SSH插件 xff0c 进入
  • java把文件流转base64,然后前端展示base64图片

    一 xff0c java端 1 xff0c 项目是基于springboot的 读取本地图片 xff0c 转成base64编码字节数组字符串 xff0c 传到前端 2 xff0c 这种传输图片的方式可以用于Java后台代码生成条形码二维码 x
  • 使用nacos配置教程

    1 xff0c 访问nacos网页 默认nacos网页为 uat环境地址 进入网页 默认账号 nacos 密码 nacos 2 xff0c 配置管理 1 xff0c 页面概述 进来页面如下 xff0c 我已经建立了三个命名空间 xff0c
  • redis实现延时队列的两种方式

    背景 项目中的流程监控 xff0c 有几种节点 xff0c 需要监控每一个节点是否超时 按传统的做法 xff0c 肯定是通过定时任务 xff0c 去扫描然后判断 xff0c 但是定时任务有缺点 xff1a 1 xff0c 数据量大会慢 xf
  • go集成gin处理error

    1 gin的使用 gin在go开发web的占比是挺大的 很好用的web框架 xff0c 简单快速高效 但是呢 xff0c 在使用gin的过程中 xff0c 如何去统一去处理error和数据返回给客户端呢 xff1f 原始的做法如下 xff1
  • Okhttp3最佳使用方式

    Okhttp3最佳使用方式 一 xff0c 使用前准备 要使用okhttp3 xff0c 首先我们要引入相关依赖 xff0c 至于版本的选择 xff0c 就根据自己项目的需求了 span class token tag span class
  • Caused by: java.net.BindException: Address already in use: bind

    这个报错是因为端口号已经被占用了 xff0c 那么就有两种解决方式 xff1a 换端口号或者杀掉这个进程 一 xff0c 换端口号 这个比较简单 xff0c 就是把tomcat的端口号改一下 xff0c 换一个没用的端口号就行了 1 xff
  • copilot平替tabnine解析

    1 copilot 借着最近chatgpt大火的东风 xff0c copilot又重新火了一把 什么是copilot xff1f 直接上wiki百科上的解释 GitHub Copilot是GitHub和OpenAI合作开发的一个人工智能工具

随机推荐