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

    文章

    10986

    浏览量

    206720
  • 源文件
    +关注

    关注

    0

    文章

    30

    浏览量

    4517
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1212
收藏 人收藏

    评论

    相关推荐

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

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

    Linux目录权限给指定用户

    Linux是一个开放源代码的操作系统,它基于Unix的设计原则,提供了丰富的权限管理功能,允许用户对系统中的文件目录进行精确的控制。在Linux中,每个
    的头像 发表于 11-23 10:30 2889次阅读

    Windows下编译工具CMake的安装和最简使用

    MCU的开发环境一般在Windows操作系统上,简单的工程一般直接编写Makefile文件后使用make工具构建程序,复杂的工程一般借助CMake来生成Makefile文件后使用make工程构建程序
    的头像 发表于 11-14 10:18 1511次阅读
    Windows下编译工具<b class='flag-5'>CMake</b>的安装和最简使用

    linux删除文件命令rm

    Linux系统中,可以使用rm命令来删除文件目录。该命令的功能是删除一个目录中的一个或多个文件
    的头像 发表于 11-13 16:42 422次阅读

    CMake构建后的项目结构解析

    Structure After CMake Build) CMake构建完成后,会在项目的根目录下生成一个名为build的目录。这个目录
    的头像 发表于 11-10 10:27 393次阅读
    <b class='flag-5'>CMake</b>构建后的项目结构解析

    Linux下如何使用CMake编译程序

    CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件
    的头像 发表于 11-08 16:15 1584次阅读
    在<b class='flag-5'>Linux</b>下如何使用<b class='flag-5'>CMake</b>编译程序

    SPI驱动源文件目录在哪

    SPI 驱动源文件目录 Linux common spi driver kernel- 4.14 /drivers/ spi/spi.c Linux 提供的通用接口封装层驱动kerne
    的头像 发表于 07-25 10:49 478次阅读
    SPI驱动<b class='flag-5'>源文件</b><b class='flag-5'>目录</b>在哪

    恒讯科技分析:如何使用cp命令在Linux中复制目录

    复制目录Linux中的一项基本任务,它允许我们复制目录、创建备份或在不同位置之间传输数据。在Linux中复制文件
    的头像 发表于 06-26 17:14 464次阅读

    恒讯科技分析:如何在Linux上使用rm命令删除文件目录

    本指南展示了如何在Linux中使用rm命令行删除文件目录和其他内容?
    的头像 发表于 06-09 17:02 851次阅读

    如何将linux下多种类型的多个文件复制到另一个目录

    即假如/haodao1目录下存在test1.txt、test2.c、test3.java、test4.py、test5.sql这五种不同类型的不同文件,如何将.txt、.c、.java、.py这些文件类型的
    发表于 06-09 15:44 739次阅读

    3. CMake set 的使用 - 上___CMake 保姆级教程【C_C++】

    CMake
    jf_97106930
    发布于 :2023年05月18日 15:39:48

    如何在Linux中查找文件所有者?

    Linux 系统中,每个文件目录都有一个所有者(owner)和一个所属组(group)。所有者通常是创建该文件目录的用户,而所属组通
    的头像 发表于 05-12 14:31 947次阅读
    如何在<b class='flag-5'>Linux</b>中查找<b class='flag-5'>文件</b>所有者?

    CMakeLinux 6.1.1-1.0.0搜索包opencv损坏了吗?

    ] 但是这个文件不存在。 并尝试使用图像 imx-image-full 的 SDK,我收到以下错误: sysroots/armv8a-poky-linux/usr/lib/cmake/opencv4
    发表于 05-09 11:32

    交叉编译之LoongArch(Makefile,CMake,AutoTool等方式)

    CROSS_COMPILE=loongarch64-linux-gnu- 预期的构建方式是CMakeLists.txt文件在源码根目录,需要创建一个build文件夹,然后在buil
    发表于 05-07 18:55

    Linux文件目录快速自动跳转命令

    那些主要通过控制台/终端使用 Linux 命令行的 Linux 用户应该感受到了 Linux 的真正力量。然而,对于新手来说,导航 Linux 分层
    的头像 发表于 05-06 10:16 658次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>文件</b><b class='flag-5'>目录</b>快速自动跳转命令