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,将相关文件安装到指定位置

 

 

posted @ 2020-04-07 21:24  静精进境  阅读(2756)  评论(0编辑  收藏  举报