【发布时间】:2021-09-22 16:37:55
【问题描述】:
我正在尝试将第三方包导入我的项目。所以我一直在关注:
但这失败了:
/tmp/top-level/bin/extern/MyLib
CMake Error at bin/extern/MyLib/MyLibConfig.cmake:12 (include):
include could not find load file:
/tmp/top-level/bin/extern/MyLib/MyLibTargets.cmake
Call Stack (most recent call first):
CMakeLists.txt:6 (find_package)
我在文档中遗漏了什么?作为参考,我的顶级 cmakelists.txt 是:
cmake_minimum_required(VERSION 3.18)
project(top-level)
add_subdirectory(extern)
find_package(MyLib CONFIG REQUIRED HINTS
${CMAKE_CURRENT_BINARY_DIR}/extern/MyLib)
'MyLib' 的 cmakelists.txt 文件是:
cmake_minimum_required(VERSION 3.18)
project(MyLib VERSION 1.0 LANGUAGES C)
add_library(MyLib mylib.c)
add_library(MyLib::MyLib ALIAS MyLib)
install(
TARGETS MyLib
EXPORT MyLibTargets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES
DESTINATION include)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
MyLibConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
install(
EXPORT MyLibTargets
FILE MyLibTargets.cmake
NAMESPACE MyLib::
DESTINATION lib/cmake/MyLib)
configure_file(MyLibConfig.cmake.in MyLibConfig.cmake @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake"
DESTINATION lib/cmake/MyLib)
【问题讨论】:
-
CMake 项目不能使用配置文件(通过
find_package),该文件是在同一项目中使用install(EXPORT)创建的。该配置文件仅在安装项目后可用(例如,使用make install)。您的主要CMakeLists.txt已经可以访问目标MyLib::MyLib,只需使用它即可。如果您不允许放弃find_package(MyLib)呼叫,那么您可以准备“假”配置文件,它什么都不做(因为所有目标都已经可以访问)。 -
@Tsyvarev 您能否发表此评论作为答案。我不明白(根据您上面的评论)为什么this 有效?
标签: cmake