多层文件结构的CMakeList
多層文件結(jié)構(gòu)的CMakeList
- 背景 & 參考源
- 多層文件的檢索
- 代碼實現(xiàn)
背景 & 參考源
對于完整的CMakeList編寫,很多大佬都有帖子,小白不班門弄斧,比如下邊的鏈接飛向大佬,這個非常詳實:
CMakeLists.txt 語法介紹與實例演練
具體問題:最近在工程中添加一些算法實現(xiàn),發(fā)現(xiàn)編譯報了link error,編譯通過但是鏈接失敗,基本能肯定是代碼文件產(chǎn)生的.o文件找不到了,這方面沒有know how所以搜搜大佬們都是怎么做的,總結(jié)下問題所在:
1.新增的算法導(dǎo)致文件夾結(jié)構(gòu)變動了,具體:組件中的文件夾中添加了一層子文件夾——文件層級結(jié)構(gòu)多了一層
2.原有的CMakeList文件,只檢索到同級文件層——文件夾中若有子文件,則子文件夾中的.c、.h就找不到啦
粗暴描述就是uint_1中的.cc和.h都沒問題,folder_1文件夾內(nèi)的.cc和.h它不認(rèn),只認(rèn)兒子不認(rèn)孫子~
所以辦法就是告訴CMake它除了兒子,還有孫子,甚至還有重孫子
多層文件的檢索
我把planning模塊中的lattice規(guī)劃器的算法實現(xiàn)放在了第四層,報的link error就是這里。
工程結(jié)構(gòu)大致如下:
解決這個問題有兩種方法:
改后對比:
代碼實現(xiàn)
#組件名 project(planning_component)#宏定義SUBDIRLIST,可看作一個函數(shù)使用,具體可參考文中鏈接 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})總結(jié):
實現(xiàn)很簡單,就是加了一層for循環(huán),遍歷模塊文件夾下的文件+子文件夾中的文件,這樣可以每個獨立的組件使用一個CMakeList便可維護。Over~…每天進步一點點
總結(jié)
以上是生活随笔為你收集整理的多层文件结构的CMakeList的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重庆3d地图
- 下一篇: 图形数据库Neo4J简介