多层文件结构的CMakeList

  • 背景 & 参考源
  • 多层文件的检索
  • 代码实现

背景 & 参考源

对于完整的CMakeList编写,很多大佬都有帖子,小白不班门弄斧,比如下边的链接飞向大佬,这个非常详实:
CMakeLists.txt 语法介绍与实例演练

具体问题:最近在工程中添加一些算法实现,发现编译报了link error,编译通过但是链接失败,基本能肯定是代码文件产生的.o文件找不到了,这方面没有know how所以搜搜大佬们都是怎么做的,总结下问题所在:
1.新增的算法导致文件夹结构变动了,具体:组件中的文件夹中添加了一层子文件夹——文件层级结构多了一层
2.原有的CMakeList文件,只检索到同级文件层——文件夹中若有子文件,则子文件夹中的.c、.h就找不到啦
粗暴描述就是uint_1中的.cc和.h都没问题,folder_1文件夹内的.cc和.h它不认,只认儿子不认孙子~
所以办法就是告诉CMake它除了儿子,还有孙子,甚至还有重孙子

多层文件的检索

我把planning模块中的lattice规划器的算法实现放在了第四层,报的link error就是这里。
工程结构大致如下:
解决这个问题有两种方法:

  1. 在planner(第3层)文件夹中再写一层CMakeList.txt,使.cc等生成对应的.o文件,在第二层的CMakeList.txt中通过target_link_libraries连接到该.o文件即可
  2. 在原有的CMakeList中,让其多检索一层,毕竟是一个组件内,不想写那么多CMakeList,简单无障碍,就是两层for循环…

改后对比:

代码实现

#组件名
project(planning_component)#宏定义SUBDIRLIST,可看作一个函数使用,具体可参考文中链接
SUBDIRLIST(SUBDIRS ${PROJECT_SOURCE_DIR})
#检索planning的一级文件夹
FOREACH(subdir ${SUBDIRS})include_directories (${subdir})aux_source_directory(${subdir} SRC)#search the deeper,检索并添加二级文件夹SUBDIRLIST(SEC_SUBDIRS ${PROJECT_SOURCE_DIR}/${subdir})FOREACH(Sec_Subdir ${SEC_SUBDIRS})include_directories (${PROJECT_SOURCE_DIR}/${subdir}/${Sec_Subdir})aux_source_directory(${PROJECT_SOURCE_DIR}/${subdir}/${Sec_Subdir} SRC)ENDFOREACH()
ENDFOREACH()aux_source_directory(. PLANNING_MAIN)
add_executable(${PROJECT_NAME}${PLANNING_MAIN}${SRC}) #SRC中包含了整个planning文件下以及子文件夹中的代码文件LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)message( ${PROJECT_SOURCE_DIR})
target_link_libraries (${PROJECT_NAME}${GLOG}${GFLAGS}${Boost_FILE_SYSTEM_LIBRARY}${Boost_SYSTEM_LIBRARY}${Boost_THREAD_LIBRARY}${ZMQ_LIBRARIES}${JSON_LIBRARIES}${LPTHREAD}${DEMOSO_LIBRARY})

总结:
实现很简单,就是加了一层for循环,遍历模块文件夹下的文件+子文件夹中的文件,这样可以每个独立的组件使用一个CMakeList便可维护。Over~…每天进步一点点

多层文件结构的CMakeList相关推荐

  1. UI开发的终极解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 呵呵,有点标题党的意思,但是如果你正在寻找UI解决方案,你一定不会白来的. 虽然没有直接开发前台界面,但是好呆也看了这么些年, ...

  2. geoserver发布瓦片数据_OpenLayers教程十八:多源数据加载之矢量切片

    在看本篇文章之前,可以先看我翻译的这篇文章:不睡觉的怪叔叔:GeoServer官方教程:矢量切片 矢量切片就是将矢量数据以金字塔的组织方式,切割成一个一个描述性文件,目前矢量切片主要有以下三种格式: ...

  3. html项目的文件结构,项目文件结构

    是否有一种推荐的方式来组织 React 的项目文件结构呢? React 对如何将文件放入文件夹中没有意见.也就是说,你可以参考使用生态系统中一些常见的组织项目文件结构的方式. 按功能或路由组织 组织项 ...

  4. 搜索引擎Lucene(2):索引文件结构及格式

    1.索引总体结构 1.1.索引层次结构 Lucene的索引结构主要分以下几个层次: 索引结构.png 索引(Index): 在Lucene中一个索引是放在一个文件夹中的.同一文件夹中的所有的文件构成一 ...

  5. 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体

    遇到的问题 在使用Solidworks进行工作的过程中,不可避免地需要进行组内模型的传递.这时候,装配体打包就会成为一个比较重要的问题.因为如果打包的方式不恰当,可能会出现无法清晰地展现文件结构,或是 ...

  6. 深入分析ELF文件结构及其载入过程

    文章目录 前言 ELF目标文件类型 以下面例子深入分析ELF 详解file命令结果的各个部分 ELF的文件结构 ELF知识扩展 Linux系统装载ELF的过程 用户层面 系统层面 前言 一般程序符号和 ...

  7. 鸿蒙App文件结构说明

    鸿蒙App文件结构说明 HarmonyOS 的应用软件包以 APP Pack(Application Package)形式发布,它是由一 个或多个 HAP(HarmonyOS Ability Pack ...

  8. element 多层导航菜单,让网页设计更简洁、美观

    前言 在现代网站中,导航菜单是非常重要的一部分,它是用户访问网站的入口,能够直接影响用户的使用体验.而多层导航菜单,更是让网站的信息结构更加清晰明了.本文将为大家介绍如何使用 element 组件库, ...

  9. 《基于eigen3多层感知机的反向传播算法实现》

    <基于eigen3多层感知机的反向传播算法实现> Deep learning 现在有四大范式 MLP.CNN.RNN.Attention,一般feature extractor会是CNN. ...

最新文章

  1. Question: Short And Long Read Sequencing
  2. Linux awk 使用
  3. DelphiXE7中创建WebService(服务端+客户端)
  4. 【客户下单】自动分单逻辑
  5. 智慧交通day02-车流量检测实现07:匈牙利算法
  6. SIGIR2021@Elliot | 一个全新且全面的推荐系统Benchmark
  7. iOS一个简单的设置圆角不引起性能问题的分类
  8. 程序员情人节必备脱单秘籍!
  9. 经典书单、站点 —— 大数据/数据分析/R语言
  10. Python 类与对象
  11. 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
  12. Python学习心得
  13. 爬取34万专栏文章:304篇10K+高赞文章汇总
  14. Java-微信授权and手机号授权
  15. Transforms的使用
  16. fail2ban 的使用
  17. 学术写作笔记(3):引言
  18. git密码重置后如何登录
  19. 程序员电影,荧屏里的程序员形象
  20. 瑞典乐队ABBA回归

热门文章

  1. 英雄联盟转区服务器维护,英雄联盟一直显示转区服务技术维护中是什么情况?...
  2. 电机不动 米兔机器人_米兔机器人滞后开箱+使用感受
  3. vgg16卷积层的计算量_vgg16模型参数量和使用的的内存计算
  4. CF1278B A and B
  5. Java练手小项目——BMI计算器
  6. 实现单点登录SAP PO JAVA客户端(ESR/ID),无需每次下载
  7. 使用AWS中国区服务快速搭建LAMP
  8. ​运动健身APP开发软件,帮助您锻炼出一个理想身材​
  9. 数学建模——模拟退火算法(Simulated Annealing,SA)
  10. 拒绝“安逸”的成都,选择拥抱人工智能