0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux中CMake的使用3-不同目录多个源文件

码农爱学习 来源:码农爱学习 作者:码农爱学习 2022-09-21 08:49 次阅读

上篇(Linux中CMake的使用2-同目录下多个源文件)介绍了在同一目录下有多个源文件时如何编写CMakeLists.txt。

本篇继续介绍不同目录下有多个源文件时如何编写CMakeLists.txt

1 有1个独立文件夹

1.1 文件目录结构

先来看下面这种情况,文件目录结构如下,sum.c、sum.h和main.c的代码内容见前面的文章。

pYYBAGMpxg6AHXY7AACrXL8Iwb4843.png

1.2 编写CMakeLists.txt

对于这种情况,CMakeLists.txt可以有不同的写法:

写法1

首先看第一种写法,如下:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

add_executable(sum_test main.c func/sum.c)

这里出现了1个新的命令:include_directories,用来指定头文件的搜索路径

写法2

再来看第二种写法,如下:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_test main.c ${SRC_LIST})

可以使用aux_source_directory,将指定目录下的源文件列表存放到变量

1.3 编译测试

在当前目录执行cmake指令:

cmake .

cmake后面的点,用来告诉CMake工具在当前目录中搜寻CMakeLists.txt文件。

自动生成makefile文件之后,再使用make指令编译源码:

make
poYBAGMpxhWAZ__WAAJAADxw9uw449.png

最后可以看到程序的运行结果。

2 有多个独立文件夹(情况1)

2.1 文件目录结构

再来看下面这种情况,文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。

其中sum.c、sum.h、sub.c和sub.h放到func这个文件夹中:

poYBAGMpxhuALLX6AAC1ScxIdBY026.png

2.2 编写CMakeLists.txt

注意CMakeLists.txt和之前的区别,其实它和上面的“写法2”一样:

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_sub_test main.c ${SRC_LIST})

2.3 编译测试

按照之前的编译测试流程进行编译测试,结果如下:

pYYBAGMpxiCAKMKmAAKK0NUnPj0093.png

3 有多个独立文件夹(情况2)

3.1 文件目录结构

再来看下面这种情况,文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。

其中sum.c和sum.h放到sumfunc这个文件夹中,sub.c和sub.h放到subfunc这个文件夹中:

此次两种文件分布在两个文件夹中:

poYBAGMpxiaANyQWAADZyBwT-N0796.png

3.2 编写CMakeLists.txt

注意CMakeLists.txt和之前的区别:

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (sumfunc subfunc)

aux_source_directory (sumfunc SRC_LIST1)
aux_source_directory (subfunc SRC_LIST2)

add_executable(sum_sub_test main.c ${SRC_LIST1} ${SRC_LIST2})

这里使用了两个aux_source_directory,将两个目录下的源文件列表分别存放到不同的变量

3.3 编译测试

按照之前的编译测试流程进行编译测试,结果如下:

pYYBAGMpxiyAdQFyAAJeH9Y16vY931.png

4 总结

本篇介绍了不同目录下有多个源文件时如何编写CMakeLists.txt。

pYYBAGMpxjGAWM-fAAZch3FOWZo591.png

对于不同文件夹下的多个源文件,主要是使用include_directories来添加头文件的搜索目录

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

add_executable(sum_test main.c func/sum.c)

另外,仍然可以借助aux_source_directory把指定目录下的所有源文件存列表存放到变量中:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

include_directories (func)

aux_source_directory (func SRC_LIST)

add_executable(sum_test main.c ${SRC_LIST})

总的来说,一个新的知识点就是include_directories的使用。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11222

    浏览量

    208896
  • 源文件
    +关注

    关注

    0

    文章

    30

    浏览量

    4569
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1262
收藏 人收藏

    评论

    相关推荐

    Linux文件系统的挂载过程

    Linux文件系统(rootfs)是Linux系统中所有其他文件系统和目录的起点,它是内核启动时挂载的第一个
    的头像 发表于 10-05 16:50 266次阅读

    如何构建Linux文件系统

    构建Linux文件系统是一个涉及多个步骤和概念的过程,它对于Linux系统的启动和运行至关重要。
    的头像 发表于 10-05 16:47 229次阅读

    【米尔NXP i.MX 93开发板试用评测】3、NXP的MCU工程目录结构和源码分析

    环境无缝集成。 而NXP的项目工程,可以说是CMake工程的优秀示范。 目录结构 这种目录结构有助于提高软件开发的效率和质量,特别是在大型项目和团队合作的环境。通过合理的组织和模块化
    发表于 09-21 21:11

    linux--sysfs文件系统

    sysfs文件系统 sysfs,全称为System Filesystem,是一个由Linux内核实现的虚拟文件系统。它扮演着一个桥梁的角色,将内核的设备和驱动程序信息以
    的头像 发表于 07-08 11:37 718次阅读
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件</b>系统

    idf.py menuconfig的时候总是提示cmake301 error的原因?

    idf.py menuconfig的时候总是,提示cmake301 error 提示没有这个目录,手动创建目录之后,还会出现更多依赖目录 例: CM
    发表于 06-20 06:01

    鸿蒙开发文件管理:【@ohos.environment (目录环境能力)】

    该模块提供环境目录能力,获取内存存储根目录、公共文件目录的JS接口。
    的头像 发表于 06-13 10:27 446次阅读
    鸿蒙开发<b class='flag-5'>文件</b>管理:【@ohos.environment (<b class='flag-5'>目录</b>环境能力)】

    VSCode编译过程cmake错误的原因?

    VSCode编译产生一个问题,问题如下: CMake Error at CMakeLists.txt:1 (idf_component_register):Unknown CMake command
    发表于 06-06 06:48

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?

    arm-poky-linux-gnueabi.cmake将下面的内容添加到arm-poky-linux-gnueabi.cmake文件:set(
    发表于 05-29 17:24

    飞凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN

    arm-poky-linux-gnueabi.cmake 将下面的内容添加到arm-poky-linux-gnueabi.cmake文件:set(
    发表于 05-29 08:53

    Linux的软、硬链接的区别

    源文件同步。   而硬链接类似于拷贝,但是却拥有同步更新的功能,再此我们可以验证。   首先在/test目录下创建文件link   (1) 分别穿件link的软连接文件和硬链接
    发表于 02-04 16:34

    批量替换多个文件特定字符串的3种方法

    在验证工作我们经常遇到批量处理某些文件,或者某些文件关键词的问题,如果单个打开编辑,效率就太低,本文分享3种简单易用的批量处理
    的头像 发表于 01-09 10:36 2001次阅读
    批量替换<b class='flag-5'>多个</b><b class='flag-5'>文件</b><b class='flag-5'>中</b>特定字符串的<b class='flag-5'>3</b>种方法

    Linux常用命令自学手册》+Linux简单指令笔记

    目录的名字。 - 用法:mv [选项] [源文件/目录] [目标文件/目录] cat:查看文件
    发表于 01-05 08:44

    Linux系统文件比较工具集合

    Linux系统文件比较是一种常见的任务,用于比较两个文件之间的差异。文件比较可以帮助我们找出两个
    的头像 发表于 01-02 13:53 656次阅读

    Linux操作系统介绍和基本命令

    Linux系统是以文件目录的方式来组织和管理系统的所有文件的(文件
    的头像 发表于 12-15 09:30 2042次阅读
    <b class='flag-5'>Linux</b>操作系统介绍和基本命令

    瑞萨RZ/G2L核心板Linux Log目录文件详解

    为了排除系统问题,监控系统健康状况以及了解系统与应用程序的交互方式,我们需要了解各log文件的作用,以G2Lyocto文件系统为例,在系统/var/log/目录下会存放记录系统
    的头像 发表于 12-11 17:34 442次阅读
    瑞萨RZ/G2L核心板<b class='flag-5'>Linux</b> Log<b class='flag-5'>目录</b><b class='flag-5'>文件</b>详解