【问题标题】:Add library to Cmake project将库添加到 Cmake 项目
【发布时间】:2016-12-20 14:01:32
【问题描述】:

也许我根本找不到它,但我想在我的项目中添加一些代码(libunwind 在这里找到http://www.nongnu.org/libunwind/download.html
这个库没有附带 CMakeLists.txt 文件,当我尝试包含它时,cmake 抱怨这个事实。现在我只是将 libunwind 目录添加到我的外部代码中,并在我的主 CMakeLists.txt 中添加了一个引用

任何输入都会很棒。

【问题讨论】:

  • 构建库。安装它。然后将其添加为普通的系统库。
  • 那么您是否希望以每次编译项目时都会编译的方式包含它?

标签: c++ build cmake libunwind


【解决方案1】:

处理图书馆有两种选择:

  1. 如果您已经下载并能够构建和安装它,您可以稍后尝试在您的 CMAKE 中找到它(在 Boost 的情况下)并链接到您的目标:

find_package( Boost COMPONENTS date_time system serialization thread program_options filesystem unit_test_framework regex chrono REQUIRED )

if( NOT Boost_FOUND ) message( FATAL_ERROR "Cannot find boost!" ) endif( NOT Boost_FOUND )

message(STATUS "boost found")

include_directories( ${Boost_INCLUDE_DIRS} ) link_directories( ${Boost_LIBRARY_DIRS} )

target_link_libraries(YOUR_TARGET_NAME ${Boost_LIBRARIES})

2.您可以将外部库源添加为独立目标,并像这样使用 CMake 来构建它:

set (sources
  async_waiter.h
  async_waiter_impl.h
  async_waiter_impl.cpp
)

add_library( async_waiter ${sources} )

然后在链接中使用 :

target_link_libraries(YOUR_TARGET_NAME async_waiter)

【讨论】:

    【解决方案2】:

    如果您想每次都与您的项目一起构建它,最简单的方法是:

    • 将源代码添加到项目树中的某处
    • 添加应在编译开始前运行的custom CMake target
    • 在该自定义目标中,运行编译库所需的任何内容(在您的情况下,它是 ./configure -> make -> make install。

    但是这很少需要,大多数时候您应该只构建一次库并将其链接为任何其他外部库。

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2018-03-30
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多