如何在CMAKE中导出包含组件的库?

时间:2013-07-31 17:06:36

标签: c++ cmake export libraries

我已经尝试在官方CMAKE维基上找到这些信息以及搜索SO(目前正在等待提升下载所以我可以通过源代码查找他们是如何做到的)。我希望这里的某个人能够帮助完成这项工作,或者指出我正确的答案方向!

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

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

FIND_PACKAGE(Boost REQUIRED COMPONENTS系统date_time文件系统)

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

FIND_PACKAGE(项目需要组件查看gui执行分析)

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

如何查找软件包以及如何编写自己的查找模块如下所述: 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应该可以正常工作。

答案 1 :(得分:1)

一个很好的指南如何编写/usr/share/cmake/Modules/readme.txt中可能找到的查找程序(或者在cmake源中,如果您的发行版不包含该文件)。特别是它解释了如何使用REQUIRE

编写支持“标准”语法(COMPONENTSfind_package_handle_standard_args&等)的正确模块