【问题标题】:How to export libraries with components in CMAKE?如何在 CMAKE 中导出带有组件的库?
【发布时间】:2013-08-01 08:17:17
【问题描述】:

我已尝试在官方 CMAKE wiki 上查找此信息以及搜索 SO(目前正在等待 boost 下载,因此我可以浏览源代码以了解他们是如何做到的)。我希望这里有人可以帮助解决这个问题,或者为我指出正确的方向!

我有一个包含多个组件的项目。现在,该项目有用于库和应用程序的子目录。我正在尝试重构项目并在各个存储库中拥有应用程序并导出库。

其他项目如何使使用以下命令成为可能(具体来说,指定哪些组件):

FIND_PACKAGE (Boost REQUIRED COMPONENTS system date_time filesystem)

我想为自己的项目使用相同的系统:

FIND_PACKAGE(Project REQUIRED COMPONENTS视图gui执行分析)

您能提供的任何帮助将不胜感激。

【问题讨论】:

  • 我知道这个问题很久以前了,但是如果你找到了解决方案,你能分享一下你是怎么做到的吗?
  • @GeorgP。不幸的是,我认为我从来没有跟进解决方案。我刚刚检查了提出这个问题的项目,该项目仍然只是使用“add_subdirectory”命令

标签: c++ cmake export libraries


【解决方案1】:

一个很好的指南如何编写您可能在/usr/share/cmake/Modules/readme.txt 中找到的查找器(或者在 cmake 源代码中,如果您的发行版不包含该文件)。特别是它解释了如何使用find_package_handle_standard_args编写支持“标准”语法(REQUIRECOMPONENTS 等)的正确模块

【讨论】:

  • 该自述文件只是指向 cmake-developer(7) 手册页的指针。而且我没有找到有关如何创建组件的信息。你能说得更清楚一点吗?
  • 根据 cmake 文档,find_package_handle_standard_args 用于查找模块,而不是配置模块,因为问题暗示cmake.org/cmake/help/v3.3/module/…
【解决方案2】:

这里描述了如何查找包以及如何编写自己的查找模块: http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries

这是我的一个非常简单的查找模块。它位于我所有库所在的顶级目录中,因此在这种情况下,找到正确的路径相当简单。

# AsmjitConfig.cmake
# - Config file for the Asmjit package
# sets:
# Asmjit_FOUND
# Asmjit_INCLUDE_DIR
# Asmjit_LIBRARIES

set(Asmjit_FOUND FALSE)

find_library(Asmjit_LIBRARY NAMES asmjit HINTS ${CMAKE_CURRENT_LIST_DIR}/asmjit)
find_path(Asmjit_INCLUDE_DIR asmjit/asmjit.h HINTS ${CMAKE_CURRENT_LIST_DIR}/asmjit/src)

message(STATUS "${Asmjit_INCLUDE_DIR}")
message(STATUS "${Asmjit_LIBRARY}")

if(NOT Asmjit_LIBRARY OR NOT Asmjit_INCLUDE_DIR)
    set(Asmjit_FOUND FALSE)
else()
    set(Asmjit_FOUND TRUE)
endif()

在你的 CMakeLists.txt 中告诉 cmake 在哪里可以找到你的模块:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "path/to/librarys")

之后 find_package 应该可以正常工作了。

【讨论】:

  • 这如何回答这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2011-10-26
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多