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

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

3天内不再提示

Cmake学习的总结(三)

电子设计 来源:电子设计 作者:电子设计 2020-12-24 17:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,在上一篇文Cmake文章里面,我们同样在文章的最后面留了一个问题实现,就是把源文件放到src目录下,把头文件放到include目录下去,这样也比较符合别人和自己日后去配置工程(一看到这两个目就能知道啥意思了,清晰明了),同时在linux环境下生成的elf文件放到bin目录下;不过在文章发出去了几天,后面有网友又有提出了一些新的需求:

(如果网友有啥实际需要,可以私聊我,只要在我自身能力之内,我都可以写成文章出来分享给大家)熟悉我的网友都知道,我也是小白,会从很基础的东西开始分享开始,虽然都是比较理论化的东西,但是都是点滴的积累(有的时候,其实你真正在有些项目开发过程中,学到的东西不是很多,更多的是依靠平时的基础积累加以扩展,所以总的来说,平时的折腾还是非常值得!);同时有啥比较实际一点的需求咋也慢慢深入,一步步来,稳扎稳打,知识性的东西来不得半点虚假和马虎。好了,开始进入主题分享了:

一、src、include、bin目录的使用(更加正规化):

1、先开始创建这三个目录结构,并把相应的文件放入进去:

root@txp-virtual-machine:/home/txp/testmy# mkdir bin build src include

root@txp-virtual-machine:/home/txp/testmy# ls

bin build include src

include目录下文件放入(这里test1.h和test2.h的内容是接续前面的文章里面的内容,这里我就不再造轮子了):

root@txp-virtual-machine:/home/txp/testmy/include# ls

test1.h test2.h

src目录下文件放入(这里test1.c和test2.c的内容是接续前面的文章里面的内容,这里我就不再造轮子了):

root@txp-virtual-machine:/home/txp/testmy/src# ls

main.c test1.c test2.c

最终我们还要在testmy目录和src目录下都创建一个CMakeLists.txt:

/*testmy目录下的CMakeLists.txt内容:*/

cmake_minimum_required(VERSION 2.8)

project(main)

add_subdirectory(src)

/*src目下CMakeLists.txt内容:*/

aux_source_directory(. SRC_LIST)

include_directories(../include)

add_executable(main ${SRC_LIST})

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

上面第一个CMakeLists.txt里面陌生的语句解释:

add_subdirectory(src)意思是可以向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置(subdirectory字母就是子目录的意思,所以意思是:这里指定src目录下存放了源文件,当执行cmake时,就会进入src目录下去找src目录下的CMakeLists.txt,所以在src目录下也建立一个CMakeLists.txt),官方用法是这样的(不过这里暂时没去深究):

add_subdirectory

----------------

Add a subdirectory to the build.

::

add_subdirectory(source_dir [binary_dir]

[EXCLUDE_FROM_ALL])

Add a subdirectory to the build. The source_dir specifies the

directory in which the source CMakeLists.txt and code files are

located. If it is a relative path it will be evaluated with respect

to the current directory (the typical usage), but it may also be an

absolute path. The binary_dir specifies the directory in which to

place the output files. If it is a relative path it will be evaluated

with respect to the current output directory, but it may also be an

absolute path. If binary_dir is not specified, the value of

source_dir, before expanding any relative path, will be used (the

typical usage). The CMakeLists.txt file in the specified source

directory will be processed immediately by CMake before processing in

the current input file continues beyond this command.

If the EXCLUDE_FROM_ALL argument is provided then targets in the

subdirectory will not be included in the ALL target of the parent

directory by default, and will be excluded from IDE project files.

Users must explicitly build targets in the subdirectory. This is

meant for use when the subdirectory contains a separate part of the

project that is useful but not necessary, such as a set of examples.

Typically the subdirectory should contain its own project() command

invocation so that a full build system will be generated in the

subdirectory (such as a VS IDE solution file). Note that inter-target

dependencies supercede this exclusion. If a target built by the

parent project depends on a target in the subdirectory, the dependee

target will be included in the parent project build system to satisfy

the dependency.

第二个CMakeLists.txt内容分析:

aux_source_directory (. SRC_LIST):把当前目录的源文件:main.c test1.c test2.c都放到变量SRC_LIST里面去。

include_directories (../include):把include目录的头文件包含进来。

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin):这里面的EXECUTABLE_OUT_PATH和PROJECT_SOURCE_DIR是CMake自带的预定义变量,同时他们的作用分别如下:

EXECUTABLE_OUTPUT_PATH :目标二进制可执行文件的存放位置

PROJECT_SOURCE_DIR:工程的根目录

所以最终生成的elf文件(也就是我们的最终可执行文件)就会放到bin目录下,然后我们build目录下会成一些配置中间文件。

具体步骤过程我写出来:

root@txp-virtual-machine:/home/txp/testmy# vim CMakeLists.txt

root@txp-virtual-machine:/home/txp/testmy# cd src

root@txp-virtual-machine:/home/txp/testmy/src# ls

main.c test1.c test2.c

root@txp-virtual-machine:/home/txp/testmy/src# vim CMakeLists.txt

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

    关注

    2

    文章

    809

    浏览量

    42796
  • 嵌入式设计
    +关注

    关注

    0

    文章

    393

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用vscode和cmake工具开发极海G32R501 MCU

    目前极海官方提供的 IDE 开发环境有 Keil/IAR/Eclipse。都能很好的完成开发,但是 VS Code 配合 CMake 工具是更加“现代”的C/C++开发环境,本文提供了在 VS Code 环境下的开发经验,以供参考。
    的头像 发表于 11-25 14:45 2630次阅读
    使用vscode和<b class='flag-5'>cmake</b>工具开发极海G32R501 MCU

    CubeMX 生成的 RTT 项目无法通过 cmake 编译怎么解决?

    在 CubeMX V6.13.0 版本上配置的 CMake 工程无法通过编译,报错如下图
    发表于 10-11 15:04

    第1章 如何学习单片机

      在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是最重要的。本章节讲到的学习单片机的方法,都是作者学习单片机的无数经验和教训总结出来的瑰宝。通过作者前面的披荆斩棘,开辟了道路,可以告诉读者
    的头像 发表于 10-10 10:32 233次阅读

    【CPKCOR-RA8D1】1、VSCODE+CMAKE开发环境搭建

    Configurator是为不使用e2 studio的用户而专门设计的图形配置工具,可以生成MDK,IAR或是CMAKE工程。 3、安装VSCODE扩展Renesas Platform 安装了Renesas
    发表于 10-09 16:17

    中兴通讯第学习发展大会圆满收官

    近日,以“AI时代组织与人才能力重塑”为主题的中兴通讯第学习发展大会在深圳成功举办。大会由中兴通讯全球学习发展中心主办。来自中国移动、中国联通、ATD、小米汽车、北森、AACTP、飞书等多位国内外领导、专家共聚一堂,就组织发
    的头像 发表于 09-26 15:24 636次阅读

    致真精密仪器2025年中总结表彰大会成功举行

    日前,致真精密仪器 2025年中总结表彰大会暨下半年战略启动会在公司总部圆满落幕。青岛、北京、杭州地员工及校企联合实验室师生线上/线下全体参会,共同回顾总结上半年发展成果,同时计划部署下半年战略规划。
    的头像 发表于 09-02 16:21 827次阅读

    ubuntu编译stm32cubmax生成的cmake工程,在最后链接阶段报错,怎么解决?

    我是直接stm32cubmax 生成的cmake 工程,我在Ubuntu 编译的时候找不到这个-lc_none , 但是我看了我的编译器安装路径有一个nano.specs ,cmake 连接选项也有
    发表于 08-08 07:30

    SEGGER工具链集成到CMake和VS Code了

    SEGGER公司已将其嵌入式开发工具链集成到了广泛使用的CMake构建配置工具中,这意味着基于Visual Studio Code(VS Code)代码编辑器的应用开发可以方便的使用SEGGER工具实现了。
    的头像 发表于 07-23 15:06 774次阅读

    相关协议信号总结

    电子发烧友网站提供《相关协议信号总结.xlsx》资料免费下载
    发表于 06-25 15:34 5次下载

    双极型极管放大电路的种基本组态的学习课件免费下载

      本文档的主要内容详细介绍的是双极型极管放大电路的种基本组态的学习课件免费下载包括了:共集电极放大电路,共基极放大电路,种基本组态的比较   输入信号ui
    发表于 04-11 16:39 27次下载

    使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解决?

    使用STM32CubeMX生成CMake工程之后,对STM32xxxx_FLASH.ld进行了修改。然后再次使用STM32CubeMX对工程进行修改的时候,STM32xxxx_FLASH.ld文件汇总被修改的部分会被恢复原状。请问各位有没有好的办法能够解决这个问题,烦请指教!!!
    发表于 03-10 06:52

    在CubeMX V6.13.0版本上配置的CMake工程无法通过编译怎么解决?

    在 CubeMX V6.13.0 版本上配置的 CMake 工程无法通过编译,报错如下图
    发表于 03-07 16:59

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

    尝试从源版本 2021.3 编译OpenVINO™ 错误: ~/项目/OpenVINO/cmake-build-debug/_deps/ext_onnx-src/onnx/onnx_pb.h
    发表于 03-05 08:29

    TOF学习总结

    iToF(间接飞行时间)技术中,波长越短,分辨细节的能力越好,主要原因与光的波动特性和调制信号的特性密切相关。以下是详细解释:1. 光的波动特性:波长与分辨率的关系波长越短,空间分辨率越高:光的波长决定了其能够分辨的最小细节。根据光学理论,分辨率与波长成反比,波长越短,能够分辨的特征尺寸越小。例如,可见光的波长(400-700 nm)比红外光(通常用于iToF,波长约850 nm)更短,因此可见光能够分辨更细微的细节。衍射极限:光的衍
    发表于 02-25 17:49 0次下载

    关于RISC-V芯片的应用学习总结

    RISC-V芯片作为一种基于精简指令集计算(RISC)原则的开源指令集架构(ISA)芯片,近年来在多个领域展现出了广泛的应用潜力和显著优势。以下是对RISC-V芯片应用的总结。 RISC-V芯片
    发表于 01-29 08:38