所以我有两个 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_DIRS
和 XXX_LIBRARIES
等变量由一些 FindXXX.cmake
脚本(旧式)设置。此外,这些变量可以在 XXXConfig.cmake
脚本中设置,如果它是手动编写的(该脚本可以包含 CMake 生成的脚本,并且可以用变量包装 IMPORTED 目标).
关于c++ - CMake Exported Lib - 在客户端应用程序中找不到包含/lib 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431013/