zoukankan      html  css  js  c++  java
  • 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,将相关文件安装到指定位置

     

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/fuzhuoxin/p/12656190.html
Copyright © 2011-2022 走看看