CMake find_package 用于非标准位置

问题描述

我正在尝试创建一个自包含库,其依赖项是自包含的。所有安装都安装到 /libs//build。 要在 cmake 构建系统中查找依赖项,我使用 find_package。因为所有安装都在自定义位置,所以我指出我使用 HINTS 来提供帮助 -

# CMake 3.16.3
# ../lib/Catch2/build is where Catch2Config.cmake is located
find_package(Catch2 required HINTS "../lib/Catch2/build" NO_MODULE)
include_directories(tests)
add_executable(tests tests.cpp)
target_link_libraries(tests PRIVATE project_warnings project_options Catch2::Catch2)

我认识到 Catch2 可能不需要它,因为它只是标题,但是我正在尝试了解 cmake 正在做什么。 上面的 CMakeLists.txt 打印出来

include Could not find load file:                                                                                                   
    <repo_dir>/lib/Catch2/build/Catch2Targets.cmake                                                   │
Call Stack (most recent call first):                                                                                                  
  tests/CMakeLists.txt:1 (find_package)

看起来还需要一个目标文件。我在 Catch2 存储库中找不到一个。 我也在为 folly 尝试相同的过程,但它对我也不起作用。 在模块模式下使用以下 Boost 工作。为什么有效?

set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${PROJECT_SOURCE_DIR}/lib/boost_1_75_0/")
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${PROJECT_SOURCE_DIR}/lib/boost_1_75_0/libs")
find_package(Boost 1.60.0 required)
include_directories(${Boost_INCLUDE_Dirs})
target_link_libraries(${CMAKE_PROJECT_NAME} ${Boost_LIBRARIES})

有人可以帮助发现我的问题以及我应该如何使用

  1. 仅标头库
  2. 静态库二进制文件
  3. 自编译库

谁的资源在不寻常的地方?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)