CMakeLists.txt實例運用(探索)


  • CMakeLists.txt實例運用(入門)中我們簡單的介紹了一下cmake的應用,這次我們接着上次的小例子繼續再來探索下一下,為了使程序的組織結構更加明確、高效的管理大程序項目,我們還得繼續研究他們之間的關系。

  初始文件夾如下:src 、 include文件夾內容與原來一樣

 

  • 這次的CMakeLists.txt增添了不少的內容:
 1 # 聲明要求的 cmake 最低版本
 2 cmake_minimum_required(VERSION 2.8)
 3 # 聲明一個 cmake 工程
 4 project(helloSLAM)
 5 #設置生成的靜態動態庫文件存放的路徑
 6 SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
 7 SET(EXECUTABLE_OUTPUT_PATH /home/tianbot/myslam/ch1/bin)#設置生成的可執行文件存放的路徑
 8 # 添加include目錄存放.h文件
 9 include_directories("include")
10 
11 # 添加庫( 庫名(自己設置)動態SHARED 靜態STATIC庫的實現文件及路徑,注意大小寫。指令大小寫無所謂,參數和變量大小寫有區別 )
12 set(sayhello src/sayHello.cpp)
13 add_library(libHello STATIC ${sayhello})#生成靜態庫
14 add_library(libHello_so SHARED ${sayhello})#生成動態庫
15 #動態庫生成,但是與靜態庫一起生成時要在名字上區別才可以通過
16 SET_TARGET_PROPERTIES(libHello_so PROPERTIES OUTPUT_NAME "libHello")
17 #將動態庫設置為與靜態庫一樣的名字,解決靜態動態庫名字不一樣的問題
18
19 SET_TARGET_PROPERTIES(libHello PROPERTIES CLEAN_DIRECT_OUTPUT 1) 20 SET_TARGET_PROPERTIES(libHello_so PROPERTIES CLEAN_DIRECT_OUTPUT 1) 21 #避免生成libHello.so時把libHello.a清理掉22 SET_TARGET_PROPERTIES(libHello_so PROPERTIES VERSION 1.2 SOVERSION 1)
23 #設置動態庫(j靜態庫不能設置)版本號版本號VERSION 指代動態庫版本,SOVERSION 指代 API 版本
24 # 添加一個可執行程序,語法:add_executable( 程序名(自己設置,最后用於執行./sayHello) 源代碼文件及路徑 )
25 set(main src/main.cpp) 26 add_executable(sayHello ${main}) 27 28 # 將庫文件鏈接到可執行程序上(名字都是上面設置的,統一對應即可,這里對應為靜態庫,你也可以使用動態庫) 29 target_link_libraries(sayHello libHello) 30 #生成了庫我們要安裝后才能使用,系統中才能找到它,安裝動態和靜態庫到usr/lib文件夾下 31 INSTALL(TARGETS libHello_so libHello 32 LIBRARY DESTINATION lib 33 ARCHIVE DESTINATION lib) 34 #安裝頭文件到usr/include/sayhello文件夾下 35 INSTALL(FILES include/sayHello.h DESTINATION include/sayhello) 36 #DESTINATION的路徑為-DCMAKE_INSTALL_PREFIX=/usr指定的這個路徑,如果不指定CMAKE_INSTALL_PREFIX 的默認定義是/usr/local 37 #輸出一些消息 38 MESSAGE(STATUS "successful" )
  •   執行命令 cmake -DCMAKE_INSTALL_PREFIX=/usr ..

  •  文件夾結構如圖:注意bin和lib的路徑,體會文件中:#設置生成的靜態動態庫文件存放的路徑 SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

                                                                                           #設置生成的可執行文件存放的路徑SET(EXECUTABLE_OUTPUT_PATH /home/tianbot/myslam/ch1/bin)

 

  •  執行make后:

 

  •  lib文件夾中生成了庫:(注意只有動態庫才需要版本,靜態庫編譯時就綁定在了程序中,具體含義查詢靜態庫和動態庫的原理就明白了)

 

  • bin文件夾生成了可執行文件:

 

  •  安裝sudo make install,將相關文件安裝到指定位置

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM