c++ - CMake Exported Lib - 在客户端应用程序中找不到包含/lib 路径

标签 c++ makefile cmake export shared-libraries

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

关于c++ - CMake Exported Lib - 在客户端应用程序中找不到包含/lib 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431013/

相关文章:

Android NDK - 从源代码构建共享库

c++ - 在 Windows 中使用 CMake 和 clang++ 设置链接器子系统

c++ - 替代 Eclipse 进行 C 和 C++ 开发?

c++ - g++:内部编译器错误:段错误(程序 cc1plus)- 我从哪里开始?

c++ - 使用数组的矩阵乘法给我错误的答案

在 Windows 中使用 Makefile 编译 C 源代码

c - 使: Nothing to be done for `all' error for make file

C++ 与 Crow、CMake 和 Docker

c++ - 我应该如何提取此 url 获取字符串

c++ - 如何将文件中的数据存储到具有 vector 成员的结构 vector 中