多层文件结构的CMakeList
多层文件结构的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就是这里。
工程结构大致如下:
解决这个问题有两种方法:
- 在planner(第3层)文件夹中再写一层CMakeList.txt,使.cc等生成对应的.o文件,在第二层的CMakeList.txt中通过
target_link_libraries
连接到该.o文件即可 - 在原有的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相关推荐
- UI开发的终极解决方案
2019独角兽企业重金招聘Python工程师标准>>> 呵呵,有点标题党的意思,但是如果你正在寻找UI解决方案,你一定不会白来的. 虽然没有直接开发前台界面,但是好呆也看了这么些年, ...
- geoserver发布瓦片数据_OpenLayers教程十八:多源数据加载之矢量切片
在看本篇文章之前,可以先看我翻译的这篇文章:不睡觉的怪叔叔:GeoServer官方教程:矢量切片 矢量切片就是将矢量数据以金字塔的组织方式,切割成一个一个描述性文件,目前矢量切片主要有以下三种格式: ...
- html项目的文件结构,项目文件结构
是否有一种推荐的方式来组织 React 的项目文件结构呢? React 对如何将文件放入文件夹中没有意见.也就是说,你可以参考使用生态系统中一些常见的组织项目文件结构的方式. 按功能或路由组织 组织项 ...
- 搜索引擎Lucene(2):索引文件结构及格式
1.索引总体结构 1.1.索引层次结构 Lucene的索引结构主要分以下几个层次: 索引结构.png 索引(Index): 在Lucene中一个索引是放在一个文件夹中的.同一文件夹中的所有的文件构成一 ...
- 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体
遇到的问题 在使用Solidworks进行工作的过程中,不可避免地需要进行组内模型的传递.这时候,装配体打包就会成为一个比较重要的问题.因为如果打包的方式不恰当,可能会出现无法清晰地展现文件结构,或是 ...
- 深入分析ELF文件结构及其载入过程
文章目录 前言 ELF目标文件类型 以下面例子深入分析ELF 详解file命令结果的各个部分 ELF的文件结构 ELF知识扩展 Linux系统装载ELF的过程 用户层面 系统层面 前言 一般程序符号和 ...
- 鸿蒙App文件结构说明
鸿蒙App文件结构说明 HarmonyOS 的应用软件包以 APP Pack(Application Package)形式发布,它是由一 个或多个 HAP(HarmonyOS Ability Pack ...
- element 多层导航菜单,让网页设计更简洁、美观
前言 在现代网站中,导航菜单是非常重要的一部分,它是用户访问网站的入口,能够直接影响用户的使用体验.而多层导航菜单,更是让网站的信息结构更加清晰明了.本文将为大家介绍如何使用 element 组件库, ...
- 《基于eigen3多层感知机的反向传播算法实现》
<基于eigen3多层感知机的反向传播算法实现> Deep learning 现在有四大范式 MLP.CNN.RNN.Attention,一般feature extractor会是CNN. ...
最新文章
- Question: Short And Long Read Sequencing
- Linux awk 使用
- DelphiXE7中创建WebService(服务端+客户端)
- 【客户下单】自动分单逻辑
- 智慧交通day02-车流量检测实现07:匈牙利算法
- SIGIR2021@Elliot | 一个全新且全面的推荐系统Benchmark
- iOS一个简单的设置圆角不引起性能问题的分类
- 程序员情人节必备脱单秘籍!
- 经典书单、站点 —— 大数据/数据分析/R语言
- Python 类与对象
- 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
- Python学习心得
- 爬取34万专栏文章:304篇10K+高赞文章汇总
- Java-微信授权and手机号授权
- Transforms的使用
- fail2ban 的使用
- 学术写作笔记(3):引言
- git密码重置后如何登录
- 程序员电影,荧屏里的程序员形象
- 瑞典乐队ABBA回归
热门文章
- 英雄联盟转区服务器维护,英雄联盟一直显示转区服务技术维护中是什么情况?...
- 电机不动 米兔机器人_米兔机器人滞后开箱+使用感受
- vgg16卷积层的计算量_vgg16模型参数量和使用的的内存计算
- CF1278B A and B
- Java练手小项目——BMI计算器
- 实现单点登录SAP PO JAVA客户端(ESR/ID),无需每次下载
- 使用AWS中国区服务快速搭建LAMP
- ​运动健身APP开发软件,帮助您锻炼出一个理想身材​
- 数学建模——模拟退火算法(Simulated Annealing,SA)
- 拒绝“安逸”的成都,选择拥抱人工智能