CMake导出的库-在客户端应用程序中找不到include/Lib路径

CMake Exported Lib - Cannot find include/lib paths in client app

本文关键字:找不到 include 路径 Lib 应用程序 客户端 CMake      更新时间:2023-10-16

所以我有两个CMake项目,MyLib和MyApp。我构建、安装MyLib并将其导出到一个自定义目录(现在只使用我的桌面:/Users/MyName/desktop/InstallDir(,然后我想在构建MyApp时使用find_package((来查找MyLin。

所以我的MyLib的CMakeLists.txt文件有以下代码:

set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/../../install")
target_include_directories(mylib PUBLIC 
$<INSTALL_INTERFACE:include> )
install(TARGETS mylib
EXPORT mylib-targets 
PUBLIC_HEADER DESTINATION include 
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
install(EXPORT mylib-targets 
NAMESPACE mylib::
FILE mylib-config.cmake
DESTINATION lib/cmake/mylib)
export(PACKAGE mylib)

这将在install/cmake/mylib 中创建一个mylib-config.cmake文件

然后在MyApp的CMakeLists.txt文件中,我有以下代码

set(mylib_DIR "${CMAKE_SOURCE_DIR}/../../install/lib/cmake/mylib")
set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/../../install")
find_package(mylib REQUIRED)
message("Include dirs: "  ${mylib_INCLUDE_DIRS} )
message("Libs: " ${mylib_LIBRARIES} )

但是,当我构建MyApp时,mylib_INCLUDE_DIRS和mylib_LIBRARIES都是空的。如果我检查mylib-config.cmake文件,这些变量也没有在其中定义,但我认为在导出包时,这些变量是自动生成的?

我错过了哪些步骤?

CMake生成的导出文件定义IMPORTED目标,而不是变量。正是针对这些目标,您在install(EXPORT)命令中设置了NAMESPACE选项。

XXX_INCLUDE_DIRSXXX_LIBRARIES这样的变量是由一些FindXXX.cmake脚本(旧式(设置的。此外,如果XXXConfig.cmake脚本是手动编写的,则可以在该脚本中设置这些变量(该脚本可以包括CMake生成的脚本,并且可以用变量包装IMPORTED目标(。

相关文章: