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
    +关注

    关注

    88

    文章

    11627

    浏览量

    217892
  • 源文件
    +关注

    关注

    0

    文章

    30

    浏览量

    4874
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1738
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux新手通关!5分钟掌握文件/目录管理,告别“找不到北”

    文件夹时明明点了操作,打开却空无一物… 其实 Linux 的文件 / 目录管理有 “固定套路”,学会 8 个核心命令,再记住 3 个避坑技巧
    的头像 发表于 11-17 10:42 152次阅读
    <b class='flag-5'>Linux</b>新手通关!5分钟掌握<b class='flag-5'>文件</b>/<b class='flag-5'>目录</b>管理,告别“找不到北”

    使用rk3568开发板,核0\\1\\3运行linux,核2运行hal,在核0怎么关闭核2

    使用rk3568开发板,核0\\\\1\\\\3运行linux,核2运行hal,想在内核通过smc指令完成核0对核2得启动和关闭,文件系统
    发表于 10-27 10:09

    飞凌嵌入式ElfBoard-Linux系统基础入门-文件操作相关shell命令

    :2.5.4 cp文件复制命令命令:cp英文全拼:copy功能:实现文件的复制操作参数:cp [选项] 源文件/目录目的文件/
    发表于 09-30 09:46

    【Milk-V Duo S 开发板免费体验】RISC-V核心NCNN基准测试

    (CMAKE_CXX_COMPILER /home/gcc/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-g++) 之后,新建一个duos的
    发表于 08-24 23:46

    Linux系统目录结构全面剖析

    Linux文件系统采用层次化的目录结构,这种设计遵循了Unix哲学的"一切皆文件"原则。理解Linux
    的头像 发表于 07-21 17:33 578次阅读

    迅为RK3568开发板基本工程目录-工程级目录

    。 AppScope 目录存放应用全局所需要的资源文件。在 AppScope,其中有 resources 文件夹和配置文件 app.jso
    发表于 07-10 10:45

    NCS怎么添加.c.h文件到工程

    Directories添加头文件路径 对工程或者文件夹鼠标右击就可以添加文件或者.c文件管理文件等操作。 可以看出,Segger添加
    的头像 发表于 06-27 14:48 747次阅读
    NCS怎么添加.c.h<b class='flag-5'>文件</b>到工程

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件目录、操作进程、网络通信、软件安装等。
    的头像 发表于 05-03 18:08 1609次阅读

    支持48位寻址!华为开源文件系统EROFS跨入大模型训练

    的要求。   最近,开源文件系统EROFS在即将到来的Linux 6.15内核周期中进行扩展,以处理更大规模的存储系统。此次改进旨在使EROFS更适配AI训练场景及其他大规模数据归档需求。   在Linux 6.15合并窗口开启
    发表于 03-27 01:22 966次阅读

    从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

    使用的u-boot源码路径为:开发板资料盘(A 盘)\4_SourceCode\3_Embedded_Linux\资源文件\出厂镜像相关,在该目录下有一个名为
    发表于 03-20 16:48

    为什么无法在OpenVINO™ 2021.3源中使用CMAKE编译ONNX模型?

    :50:10:严重错误:onnx/onnx-ml.pb.h:无此类文件目录#include“onnx/onnx-ml.pb.h” 使用 CMAKE* 编译命令: cmake
    发表于 03-05 08:29

    DLP LightCrafter 6500&amp;9000-4.0.1 安装后,对其安装目录下的Sources文件夹下的源文件用Qt编译,出现上图错误是什么原因?

    DLP LightCrafter 6500&9000-4.0.1 安装后,对其安装目录下的Sources文件夹下的源文件用Qt编译,出现上图错误是什么原因?
    发表于 02-26 07:15

    Linux的用户与创建

    Linux的用户与创建 用户的类型 超级管理用户: 权限最高的用户(uid:0) #uid:是用户的身份证号,Linux系统只认uid 普通用户: 权限受限的用户(uid:1000-60000
    的头像 发表于 12-20 14:24 1181次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>的用户与创建

    飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明

    Linux内核目录下有很多的文件夹和文件,很多文件夹和文件我们不需要关注,我们主要了解比较
    发表于 12-16 13:04

    linux网卡配置文件

    网卡配置文件     网卡目录[root@localhost opt]# ls /etc/sysconfig/network-scripts/网卡文件名字,和我们ifconfig看到的一样
    的头像 发表于 12-10 10:09 1097次阅读