zoukankan      html  css  js  c++  java
  • CMake实践(4)

    一,本期目标:

    [sun@localhost t4]$ cat README
    任务:如何使用外部共享库和文件

    二,目录结构

    [sun@localhost t4]$ tree ../t4
    ../t4
    ├── CMakeLists.txt
    ├── README
    └── src
        ├── CMakeLists.txt
        └── main.cpp

    1 directory, 4 files

    三,CMakeLists.txt

    [sun@localhost t4]$ cat CMakeLists.txt
    PROJECT(NEW_HELLO)
    cmake_minimum_required(VERSION 2.6)
    ADD_SUBDIRECTORY(src)
    [sun@localhost t4]$ cat src/CMakeLists.txt
    PROJECT(main)
    #注意:如果工程有依赖库的话,ADD_EXECUTABLE指令要放在LINK_DIRECTORIES指令之后,
    #       不然会报错:Linking C executable main
    #                   /usr/bin/ld: cannot find -lhello
    #                   collect2: ld 返回 1
    #ADD_EXECUTABLE(main main.cpp)

    #1)增加头文件搜索路径,解决编译期间找不到头文件的问题
    INCLUDE_DIRECTORIES(../../t3/lib)

    #2)增加库文件: 解决链接期间找不到调用外部接口的问题
    #main.cpp:(.text+0x5): undefined reference to `HelloFunc()'
    #collect2: error: ld returned 1 exit status

    #3)增加库文件搜索路径:解决链接期间找不到库文件的问题
    #/usr/bin/ld: cannot find -lhello
    #collect2: error: ld returned 1 exit status
    #好像相对路径会找不到库文件
    LINK_DIRECTORIES(../../t3/lib /home/TOM/cmake_practice/cmake/t3/lib)

    ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)

    TARGET_LINK_LIBRARIES(${PROJECT_NAME} hello) #链接动态库指令
    #TARGET_LINK_LIBRARIES(${PROJECT_NAME} libhello.a)  #链接静态库指令


    #COMMAND: INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dire1 dire2 ...)
    #定义:向工程添加多个特定的头文件搜索路径,路径之间用空格分开,
    #       如果路径中包含空格,可以使用双引号括起来
    #       默认是追加到当前的头文件搜索路径之后,你可以用2种方式控制搜索路径的添加方式
    #       1)CMAKE_INCLUDE_DIRECTORIES_BEFORE 通过SET设置其为on,使用前置模式
    #       2)通过AFTER或BEFORE参数,控制追加还是置前

    #COMMAND: LINK_DIRECTORIES(dir1 dir2 ...)
    #定义:添加非标准的共享库搜索路径

    #COMMAND: TARGET_LINK_LIBRARIES(target  library1
    #                                <debug | optimized> library2
    #                                ...)
    #定义:用来为target添加需要链接的共享库

    四,运行结果:

    (略)

  • 相关阅读:
    js中__proto__和prototype的区别和关系?
    Vue绑定事件v-on(@)与修饰符
    Vue状态(视图共享)管理:Vuex
    Vue UI框架对比:Element UI、Ant Design Vue、iView
    搞清楚Vue-router中的Router、Router实例、Router对象的区别与联系
    Vue-router高级进阶知识
    Vue-router基础知识
    FloatHelper
    scrollHelper
    DialogHelper
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/3780064.html
Copyright © 2011-2022 走看看