• target_link_libraries接口的使用


    target_link_libraries需要放在add_executable之后,用于指明连接进来的库,官方推荐使用这个接口,而不推荐使用link_libraries,link_libraries需要放到add_executable之前。

    当编写一个大工程,使用add_subdirectory包括其他的工程,比如下列目录这种情况

    1. ├── bit_operate
    2. │   ├── CMakeLists.txt
    3. ├── cmake
    4. │   └── toolschain
    5. ├── CMakeLists.txt
    6. ├── compile.sh
    7. ├── container
    8. │   ├── CMakeLists.txt
    9. ├── core
    10. │   ├── CMakeLists.txt
    11. ├── data
    12. │   ├── CMakeLists.txt
    13. ├── encrype_decrype
    14. │   ├── CMakeLists.txt
    15. ├── io
    16. │   ├── CMakeLists.txt
    17. ├── ipc
    18. │   ├── CMakeLists.txt
    19. ├── README.md
    20. ├── stat.sh

    根目录的CMakeLists.txt内容如下:

    1. cmake_minimum_required(VERSION 3.5)
    2. project (main)
    3. message("DEBUG" ${CMAKE_CXX_FLAGS})
    4. if(CMAKE_BUILD_TARGET STREQUAL ArmPoky)
    5. #設置toolchain文件路徑
    6. set(CMAKE_TOOLCHAIN_FILE
    7. ${CMAKE_SOURCE_DIR}/cmake/toolschain/ArmPony.cmake)
    8. message(STATUS "CMAKE_TOOLCHAIN_FILE:" ${CMAKE_TOOLCHAIN_FILE})
    9. else()
    10. #HOST ENV
    11. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    12. endif()
    13. message("DEBUG" ${CMAKE_CXX_FLAGS})
    14. # Add an executable
    15. #add_executable(main test_printf.cpp)
    16. add_subdirectory(encrype_decrype)
    17. add_subdirectory(core)
    18. add_subdirectory(io)
    19. add_subdirectory(ipc)
    20. add_subdirectory(container)
    21. add_subdirectory(assemebly_language)
    22. add_subdirectory(bit_operate)
    23. add_subdirectory(data)
    24. add_subdirectory(openssl)
    25. if(CMAKE_BUILD_TARGET STREQUAL ArmPoky)
    26. SET(CMAKE_ARM_COMPILATION 1)
    27. endif()

    最开始想当然,在这个文件的最后的add_subdirectory命令下面添加target_link_libraries接口,但是报错:

    Attempt to add link library "libreadline.so" to target "TEST_FILE_IO" which
      is not built in this directory

     然后把target_link_libraries放到对应TEST_FILE_IO的工程CMakeLists.txt中,不再报错。

    cmake_minimum_required(VERSION 3.5)

    # Set the project name

    project (TEST_FILE_IO)

    # Add an executable

    add_executable(TEST_FILE_IO getfiles.cpp)

    target_link_libraries(TEST_FILE_IO libreadline.so)

    所以target_link_libraries需要跟着add_executable或者类似功能(指明编译可执行文件或者编译库)的接口走。

  • 相关阅读:
    iOS开发实战-仿小红书App开发-1-App创建与Git
    面向对象基础
    顺序表的定义与实现(数据结构与算法)
    Web服务(03)——HTTP协议
    Redis6学习笔记
    tensorflow的GPU加速计算
    20、架构-容器间网络
    2022.8.16 模拟赛
    day01 Redis
    如何不打开谷歌浏览器对本地文档批量翻译
  • 原文地址:https://blog.csdn.net/MashiMaroJ/article/details/127859775