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

     

  • 相关阅读:
    Android通知栏介绍与适配总结
    Java emoji持久化mysql
    css自适应
    常用网址总结
    前端开发常用技巧
    JAVA问题集锦Ⅰ
    Android之常见问题集锦Ⅱ
    Java集合之ConcurrentHashMap.addCount解析
    Java集合之ConcurrentHashMap解析
    Java数据结构之Map
  • 原文地址:https://www.cnblogs.com/fuzhuoxin/p/12656190.html
Copyright © 2011-2022 走看看