多层文件结构的CMakeList
生活随笔
收集整理的這篇文章主要介紹了
多层文件结构的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就是這里。
工程結構大致如下:
解決這個問題有兩種方法:
改后對比:
代碼實現
#組件名 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重庆3d地图
- 下一篇: 获取微信语音文件silk 微信语音文件在