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

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

3天内不再提示

Linux中CMake的使用4-代码与编译文件单独存放

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

本篇介绍当源文件编译文件独立存放时,如何编写CMakeLists.txt。

1只使用一个CMakeLists.txt

1.1 目录结构

文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。

其中sum.h和sub.h放到include这个文件夹中,main.c、sum.c和sub.c放到src这个文件夹中。

在整个工程中,只有一个CMakeLists.txt:

pYYBAGMrImeAOwP9AAC05JSEiH0714.png

1.2 CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (include)

aux_source_directory (src SRC_LIST)

add_executable (sum_sub_test ${SRC_LIST})

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

最后一句是一个新的知识点:

EXECUTABLE_OUTPUT_PATH:CMake自带的预定义变量,表示可执行文件的存放位置

PROJECT_SOURCE_DIR:CMake自带的预定义变量,表示工程的根目录

set指令:用于定义变量,即指定可执行文件存放在工程根目录下的bin目录中

1.3 运行测试

poYBAGMrIm-ABCWUAAJ-1ZPUIV8858.png

2 顶层+子层CMakeLists.txt

一个工程,可以不只有一个CMakeLists.txt,通过层级间的管理,可以实现顶层对底层的调用。

2.1 目录结构

文件目录结构如下,sum.c、sum.h、sub.c、sub.h和main.c的代码内容见前面的文章。

其中sum.h和sub.h放到include这个文件夹中,main.c、sum.c和sub.c放到src这个文件夹中。

在整个工程中,外出有一个CMakeLists.txt,子层src目录中也有一个CMakeLists.txt:

poYBAGMrInaAAceHAADFaC6CL1A628.png

2.2 CMakeLists.txt

2.2.1 顶层CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

add_subdirectory (src)

最后一句是一个新的知识点:

add_subdirectory():向当前工程添加存放源文件的子目录

这里指定的是在src目录下存放了源文件

当执行cmake指令时,就会进入src目录下去找下一级的CMakeLists.txt

所以在src目录下也必须要有一个子层的CMakeLists.txt

2.2.2 子层CMakeLists.txt

include_directories (../include)

aux_source_directory (. SRC_LIST)

add_executable(sum_sub_test ${SRC_LIST})

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

最后的set语句刚才已经见过了,就是指定可执行文件的输出位置。

2.3 运行测试

poYBAGMrIn6AB5-jAAJogwHTdaE221.png

3 总结

本篇介绍了源文件与编译文件独立存放时,如何编写CMakeLists.txt。

pYYBAGMrIoSAZHmrAAEi5S1FkQM322.png
cmake_minimum_required (VERSION 2.8)

project (sum_sub_test)

include_directories (include)

aux_source_directory (src SRC_LIST)

add_executable (sum_sub_test ${SRC_LIST})

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

新引入的知识点是最后这句,通过set来指定可执行文件的输出位置:

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

以及使用顶层+子层的CMakeLists.txt时,通过add_subdirectory来指定子层源文件的目录:

add_subdirectory (src)

并在相应的子层目录中再编写CMakeLists.txt。

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

    关注

    87

    文章

    10988

    浏览量

    206725
  • 编译
    +关注

    关注

    0

    文章

    614

    浏览量

    32374
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1213
收藏 人收藏

    评论

    相关推荐

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

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

    Linux编程】如何使用gcc编译代码时输出map文件

    Linux编程】如何使用gcc编译代码时输出map文件
    的头像 发表于 08-15 14:08 6665次阅读
    【<b class='flag-5'>Linux</b>编程】如何使用gcc<b class='flag-5'>编译</b>源<b class='flag-5'>代码</b>时输出map<b class='flag-5'>文件</b>?

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

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

    【DragonBoard 410c试用体验】使用cmake编译opencv工程

    这边帖子将介绍如何自己建立一个opencv工程在opencv的文件目录下新建一个文件存放工程代码sudo mkdir test我创建了一个test
    发表于 10-02 23:12

    STM32帮忙编译文件,有原代码,自已不会编译,有人会搞吗?

    STM32帮忙编译文件,有原代码,自已不会编译,有人会搞吗?报酬300元。
    发表于 07-17 09:03

    Cmake构建linux工程的步骤

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

    如何编译多个源文件代码

    make3.作用:自动编译4.makefile文件的作用:存放编译项目的命令(如何编译这个项目的
    发表于 12-21 08:11

    请问全志A40i能否单独编译驱动模块?如何编译

    ) modules#-C:后面的参数为linux内核的顶层目录#M:后面的参数为需要编译文件的目录make -C $(KDIR) M=$(PWD) modules请各位大佬指点一下目前全志A40i能否单独
    发表于 01-04 06:18

    aarch64-linux-gnu-gcc能不能编译文件系统

    第一次用这样的开始环境,也是新手,虚拟机机已经有了aarch64-linux-gnu-gcc,这个只用来编译文件系统吗?如果自己写应用,是不是还要安装QT之类的环境?aarch64-linux-gnu-gcc能不能
    发表于 01-05 06:51

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

    的gcc编译。 当然上述的指定gcc的方式只是其中一种,更多的方式可以根据Cmake的特性进行修改(比如修改CMakeLists.txt文件)。 4. 使用autotools-pack
    发表于 05-07 18:55

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

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

    Linux编程】如何使用gcc生成预编译文件

    Linux编程】如何使用gcc生成预编译文件
    的头像 发表于 08-31 13:07 1571次阅读
    【<b class='flag-5'>Linux</b>编程】如何使用gcc生成预<b class='flag-5'>编译文件</b>?

    LinuxCMake的使用2-同目录下多个源文件

    上篇文章(LinuxCMake的使用1-单个源文件)介绍了编写CMakeLists.txt的最基础用法——只有一个源文件的情况。
    的头像 发表于 09-20 08:57 1379次阅读
    <b class='flag-5'>Linux</b>中<b class='flag-5'>CMake</b>的使用2-同目录下多个源<b class='flag-5'>文件</b>

    Linux下如何使用CMake编译程序

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

    CMake构建后的项目结构解析

    地。下面我们将详细解析这个目录的结构。 首先,我们来看一下build目录的一级子目录: CMakeFiles:这个目录中存放的是CMake在构建过程中生成的临时文件,包括编译器检查的结
    的头像 发表于 11-10 10:27 394次阅读
    <b class='flag-5'>CMake</b>构建后的项目结构解析