5

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

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

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

FIND_PACKAGE (Boost REQUIRED COMPONENTS system date_time filesystem)

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

FIND_PACKAGE (Project REQUIRED COMPONENTS 查看gui执行分析)

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

4

2 回答 2

1

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

于 2013-08-05T01:08:20.357 回答
0

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

于 2013-07-31T22:49:49.590 回答