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

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

3天内不再提示

Linux中CMake的使用2-同目录下多个源文件

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

上篇文章(Linux中CMake的使用1-单个源文件)介绍了编写CMakeLists.txt的最基础用法——只有一个源文件的情况。

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

1 一组文件的情况

先来看下面这种情况:除了main.c以外,只多出来一组源文件(1个.c文件+1个.h文件)。

poYBAGMoc9eARppKAAA4ovF0T1w014.png

1.1 编写C源文件

以一个简单的两数相加为例,代码如下:

main.c

#include 
#include "sum.h"

int main(void)
{
    int a = 1;
    int b = 2;
    printf("a=%d, b=%d\n", a, b);
    printf("a+b=%d\n", sum(a, b));

    return 0;
}

sum.c

#include "sum.h"

int sum(int a, int b)
{
    return (a + b);
}

sum.h

#ifndef _SUM_H_
#define _SUM_H_

int sum(int a, int b);

#endif

1.2 编写CMakeLists.txt

CMakeLists.txt的内容,和上一篇介绍的对单个文件进行编译的情况基本一样:

cmake_minimum_required (VERSION 2.8)

project (sum_test)

add_executable(sum_test main.c sum.c)

注意,同个目录有多个源文件,CMakeLists的主要区别是在add_executable继续增加需要编译的c文件。

1.3 编译测试

在当前目录执行cmake指令:

cmake .

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

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

make
pYYBAGMoc-GAeqh7AAJFgrAub0I598.png

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

2 多组文件的情况

再来看下面这种情况:除了main.c以外,还多出来两组源文件(sum.c+sum.h、sub.c+sub.h)。

pYYBAGMoc-aAM6C7AAA_OhHDDoE561.png

2.1 编写C源文件

测试代码仍很简单,sum的函数和上面一样,sub函数以及main的代码如下:

main.c

#include 
#include "sum.h"
#include "sub.h"

int main(void)
{
    int a = 1;
    int b = 2;
    printf("a=%d, b=%d\n", a, b);
    printf("a+b=%d\n", sum(a, b));
    printf("a-b=%d\n", sub(a, b));

    return 0;
}

sub.c

#include "sub.h"

int sub(int a, int b)
{
    return (a - b);
}

sub.h

#ifndef _SUB_H_
#define _SUB_H_

int sub(int a, int b);

#endif

注:sum.c和sum.h和之前的一样

2.2 编写CMakeLists.txt

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

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

aux_source_directory(. SRC_LIST)

add_executable(sum_sub_test main.c ${SRC_LIST})

这里使用aux_source_directory把当前目录(.)下的所有源文件存列表存放到变量SRC_LIST

然后在add_executable里调用SRC_LIST,这样,当有再多的源文件,CMakeLists也不需要改了

2.3 编译测试

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

poYBAGMoc-6ABPbpAAKobE1gqsE604.png

3 总结

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

pYYBAGMoc_OAQTRAAAEX12D-JgM796.png

对于同个文件夹下有多个源文件,主要还是修改add_executable这句,将需要用到的C文件添加进去即可:

cmake_minimum_required (VERSION 2.8)

project (hello)

add_executable(sum_test main.c sum.c)

另外,还可以借助aux_source_directory把指定目录下的所有源文件存列表存放到变量中,这样就不受文件数量的影响:

aux_source_directory(. SRC_LIST)
add_executable(sum_sub_test main.c ${SRC_LIST})

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

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

    关注

    87

    文章

    10994

    浏览量

    206771
  • 源文件
    +关注

    关注

    0

    文章

    30

    浏览量

    4521
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1216
收藏 人收藏

    评论

    相关推荐

    LinuxCMake的使用3-不同目录多个源文件

    上篇(LinuxCMake的使用2-目录下多个源文件)介绍了在同一
    的头像 发表于 09-21 08:49 3119次阅读
    <b class='flag-5'>Linux</b>中<b class='flag-5'>CMake</b>的使用3-不同<b class='flag-5'>目录</b><b class='flag-5'>多个</b><b class='flag-5'>源文件</b>

    Linux目录文件结构

    ,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。/boot:Linux的内核及引导系统程序所需要的文件
    发表于 12-01 14:44

    LINUX目录文件结构

    目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。/lost+found: 在ext2或ext3文件系统
    发表于 04-13 15:10

    keil自带的ST例程添加自己的源文件和头文件应该放到哪个目录下

    用keil里的例程,修改写GPIO流水灯的例程。直接在main()函数配置,是可以实现了;可是我做液晶显示用自己的源文件和头文件,应该放到哪个目录下呢?比如说我的keil是装在D盘的。我直接在D
    发表于 05-22 07:22

    Cmake构建linux工程的步骤

    一、Cmake构建linux工程列出本人在使用的cmake文件,用于构建工程,在cmake.txt文件
    发表于 12-16 07:16

    如何编译多个源文件的代码呢

    嵌入式Linux开发工具-工程管理器 make1.什么是工程/项目?(项目:多个源文件、资源文件构成的项目代码)2.如何编译
    发表于 12-21 08:11

    /OK8MM-linux-sdk的bsp源文件在哪里下载?

    /OK8MM-linux-sdk文件目录下怎么没有bsp源文件,或者不在这个目录下?我想看一下自带的gstreamer源码
    发表于 12-31 07:28

    介绍一下如何基于cmake框架新建一个全新的项目

    和 CMakeLists.txt 文件即可目录结构如下:CMakeLists.txt:在 main.c 编写好相应的功能代码后,在 bl_mcu_sdk 目录下进行编译即可,编译命
    发表于 06-29 17:32

    JAVA教程之列出目录下文件

    JAVA教程之列出目录下文件,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 5次下载

    Cmake学习的总结(三)

    在上一篇文Cmake文章里面,我们同样在文章的最后面留了一个问题实现,就是把源文件放到src目录下,把头文件放到include目录下去,这样
    的头像 发表于 12-24 17:45 460次阅读

    嵌入式Linux开发之文件系统目录结构介绍

    中。一、与windows区别Linux不像windows有盘符的概念,只有一个根目录概念,所有文件系统(硬盘、U盘、CDROM、网络文件系统)都以一个子
    发表于 11-01 16:31 3次下载
    嵌入式<b class='flag-5'>Linux</b>开发之<b class='flag-5'>文件</b>系统<b class='flag-5'>目录</b>结构介绍

    CMake的实战教程-2

    第一个问题,在运行`cmake .`后会产生很多垃圾文件,那么我们可以让它在一个build目录下去编译,生成的垃圾文件放在这个目录下就好了,
    的头像 发表于 02-14 10:43 458次阅读

    CMake实战教程-2

    第一个问题,在运行`cmake .`后会产生很多垃圾文件,那么我们可以让它在一个build目录下去编译,生成的垃圾文件放在这个目录下就好了,
    的头像 发表于 02-28 16:18 459次阅读

    CMake构建后的项目结构解析

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

    linux删除文件命令rm

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