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

    文章

    11302

    浏览量

    209425
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32867
  • CMake
    +关注

    关注

    0

    文章

    28

    浏览量

    1271
收藏 人收藏

    评论

    相关推荐

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

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

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

    Linux编程】如何使用gcc编译代码时输出map文件
    的头像 发表于 08-15 14:08 8252次阅读
    【<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 8214次阅读
    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

    请问全志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

    交叉平台开源编译系统_cmake入门

    交叉平台开源编译系统_cmake入门
    发表于 01-22 13:59 9次下载

    cmake管理配置ROOT项目的方法

    配置文件组成。   序号 文件文件说明 1 CMakeLists.txt  Cmake配置文件,用于组织项目的
    的头像 发表于 01-18 17:45 4617次阅读
    <b class='flag-5'>cmake</b>管理配置ROOT项目的方法

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

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

    LinuxCMake的使用1-单个源文件

    linux中进行C/C++开发,一般都是先用编辑器写好代码,然后使用gcc工具来编译程序。
    的头像 发表于 09-18 17:56 1709次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>CMake</b>的使用1-单个源<b class='flag-5'>文件</b>

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

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

    Linux下如何使用CMake编译程序

    CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配
    的头像 发表于 11-08 16:15 6400次阅读
    在<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 2069次阅读
    <b class='flag-5'>CMake</b>构建后的项目结构解析