cmake(六)Cmake添加工程子目录

2023-05-16

重点: 'cmake3' 和 'make' 命令'输出'的'深刻解读'

备注: 当前阶段暂时不使用'IDE'工具,先'熟悉各指令'

一  ADD_SUBDIRECTORY语法

应用场景:  一般情况下,我们的项目'各个子项目'都在一个'总的项目根'目录下,但有的时候,我们需要使'用外部的文件夹'

cmake项目模块布局

 

二  实践1

①  初始化

'外部文件夹'引入理解: 不在'CMakeLists'目录下 -->(与其'平级'或者还在'其外'),这里'不是'指的项目'根目录外'的文件夹,更多的是项目根目录下'子项目间'

++++++++++++++'初始化的流程'++++++++++++++

1)创建'SubDirectory项目'的文件夹,并'cd'进入

2)创建'SubDirectory项目'的源文件目录-->'src'

3)创建'SubDirectory项目'的'CMakeLists.txt'文件

②  编写SubDirectory项目CMakeLists.txt文件

场景1:  要添加的'src文件夹'是当前项目'SubDirectory'的子目录-->add_library只'指定一个指令'即可

细节: src既是'要添加的子目录'、也是'(子目录)编译输出保存'的路径-->用'用子目录名'主要是'标识'是哪个'子目录'cmake3的'产物'

③  继续

进入'src'源文件子目录,创建'示范性的源文件'-->main.cpp

备注: std:endl '应为' std::endl

④ 编写src目录CMakeLists.txt文件

备注: 子目录'src'并没有指定'project'

⑤  采用外部构建

⑥  构建测试

细节: 父项目'SubDIrectory'根据自身的CMakesFiles.txt文件中的'add_subdirectory'指令,也会对子项目'src'进行'cmake3'

验证: cmkae3 .. 之后,子目录也声称了'Makefile'目录

++++++++++++++++++'add_subdirectory效果'++++++++++++++++++

1)首先会'自动'调用该'子目录(src)'下的CMakeLists.txt文件

2)还会在'build目录(out of build:外部构建)'生成对应的'目标(target)'文件

备注1: 体现在CMAKE_CURRENT_BINARY_DIR的变量,通过'打印'该变量查看

备注2: add_subdirectory(src target) -->默认是'src',在build目录会变成'target'

补充1: 任意一个'目录源文件(Source Tree)'对应一个'构建目录(Build Tree)'的target

补充2: include(src/CMakeLIsts.txt)'破坏'了'target目录结构构造'的功能

补充3: 通过add_subdirectory()'自顶向下'一层一层的'查找'CMakeLists.txt文件

参考博客

三  实践2

①  清理上次实验的环境

②  演示bin_dir

测试

四   注意事项

①  超出平级目录

只要'不是上下级关系'(比如:hello/ 和 world/ 目录在其他目录下或者是 test/ 目录的上级),在使用 add_subdirectory() 时都'需要指定 [binary_dir] 参数'

②  报错信息

注意: 如果 src_dir '不是'当前目录(CMakeLists.txt 所在目录)的'子目录',那么就需要'显式指定 '[binary_dir] 参数,用于'存储 src_dir 相关'文件

解读: 如果指定'src_dir(子目录)',但是'src_dir'不是当前项目的'子目录',则'cmake3 输出'默认会保存在'src_dir'目录,而'当前项目'无法使用,需要'保存到当前项目路径',所以要指定'bin_directory'

参考博客1

参考博客2

cmake生成完毕后自动执行其他命令

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake(六)Cmake添加工程子目录 的相关文章

随机推荐