CMake导出库-在客户端应用中找不到包含/库路径

时间:2018-07-19 20:11:49

标签: 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文件,也没有在其中定义那些变量,但是我认为在导出软件包时,这些变量是自动生成的吗?

我缺少什么步骤?

1 个答案:

答案 0 :(得分:1)

CMake生成的

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

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