繁体   English   中英

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

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

所以我有两个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目标)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM