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添加需要链接的共享库

    四,运行结果:

    (略)

  • 相关阅读:
    入梦初醒
    工作杂记
    终于用上双屏了!
    工作杂记(ii)
    2008
    $this>$a与$this>aPHP学习笔记
    明天要开工了
    好的程序员如何被发现,如何证明你简历中所标榜的那些精通和能力?
    架构师的思考:性能优化到何处为止?选择的原则
    极具挑战的超级智力测验题
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/3780064.html
Copyright © 2011-2022 走看看