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

    文章

    772

    浏览量

    41554
  • 嵌入式设计
    +关注

    关注

    0

    文章

    390

    浏览量

    21241
收藏 人收藏

    评论

    相关推荐

    执行build.py menuconfig时报“ Unknown CMake command \"__add_uf2_targets\".”错误,请问是什么原因?

    执行build.py menuconfig时报“Unknown CMake command \"__add_uf2_targets\".”错误,请问这是什么原因?
    发表于 06-27 06:21

    idf.py menuconfig的时候总是提示cmake301 error的原因?

    idf.py menuconfig的时候总是,提示cmake301 error 提示没有这个目录,手动创建目录之后,还会出现更多依赖目录 例: CMake Error at /home
    发表于 06-20 06:01

    刚刚装好esp32 elipse CMAKE编译环境,hello word编译不通过怎么解决?

    CMake Error at E:/Work/eclipse-esp/esp-idf/tools/cmake/component.cmake:305 (message): Include
    发表于 06-18 06:15

    华为PCBA检查规范设计总结

    福利来啦! 给大家分享《华为PCBA检查规范设计总结
    的头像 发表于 06-15 16:25 2042次阅读
    华为PCBA检查规范设计<b class='flag-5'>总结</b>

    嵌入式学习-飞凌ElfBoard ELF 1板卡 - 如何在Ubuntu中编译OpenCV库

    elf@ubuntu:~/work/opencv/opencv-3.4.1$ mkdir install build:是构建目录。 install:是安装目录。 (5)安装cmakecmake-gui工具和依赖
    发表于 06-07 09:21

    VSCode中编译过程cmake错误的原因?

    VSCode中编译产生一个问题,问题如下: CMake Error at CMakeLists.txt:1 (idf_component_register):Unknown CMake command
    发表于 06-06 06:48

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?

    在计算机视觉和深度学习领域,NCNN(Netural Network Computer Vision)是一个轻量级的神经网络计算框架,被广泛应用于各类嵌入式设备和移动平台。今天,让我们一同跟随共创
    发表于 05-29 17:24

    飞凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN

    在计算机视觉和深度学习领域,NCNN(Netural Network Computer Vision)是一个轻量级的神经网络计算框架,被广泛应用于各类嵌入式设备和移动平台。今天,让我们一同跟随共创
    发表于 05-29 08:53

    请问一下CMake和Make之间的区别有哪些?

    CMake和Make是构建软件,其工作涉及将源代码转换为可执行程序。CMake和Make是旨在实现构建过程自动化的工具,帮助开发者节省时间和精力。
    的头像 发表于 02-27 11:44 1662次阅读

    无人机测深的种方法总结

    无论是陆地测绘还是海洋测绘,测绘行业都是朝着航空方向发展。下面结合搜索到的论文和相关网页,总结下无人机测深的方法,总共有种:1)机载激光雷达;2)机载探地雷达(GPR);3)机载高精度测深仪。
    的头像 发表于 01-05 11:24 1694次阅读
    无人机测深的<b class='flag-5'>三</b>种方法<b class='flag-5'>总结</b>

    LED灯变暗的原因总结

    LED灯越用越暗,是一种非常常见的现象。总结能够让LED灯变暗的原因,不外乎以下点。
    的头像 发表于 12-15 11:24 2868次阅读

    Linux下如何使用CMake编译程序

    今天分享一篇关于 cmake 的相关文章,通过这个工具可以生成本地的Makefile。让我们不用去编写复杂的Makefile。
    的头像 发表于 11-21 09:28 1538次阅读
    Linux下如何使用<b class='flag-5'>CMake</b>编译程序

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

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

    CMake构建后的项目结构解析

    一、 CMake构建后的项目结构解析(Analysis of the Project Structure After CMake Build) 1.1 CMake构建后的目录结构(Directory
    的头像 发表于 11-10 10:27 1795次阅读
    <b class='flag-5'>CMake</b>构建后的项目结构解析

    在Linux下如何使用CMake编译程序

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