如何设置导出的cmake库项目以供其他cmake项目使用

时间:2017-09-12 21:27:35

标签: cmake

我很难理解CMakes安装/导出命令的正确用法。我希望有一个 CMakeLists.txt ,它可以使用find_package命令为(不同的,独立的)CMake项目生成一个静态库(解决方案)。

我有一个包含四个文件的根文件夹:

  • /hello.cpp
  • /hello_private.h
  • /hello_public.h
  • /CMakeLists.txt

CMakeLists.txt 是:

cmake_minimum_required (VERSION 3.9)
project (hellolib)

add_library(hellolib hello_public.h hello_private.h hello.cpp)

set_target_properties(hellolib PROPERTIES
  PUBLIC_HEADER "hello_public.h")

export(TARGETS hellolib FILE hellolib-config.cmake)

install(TARGETS hellolib
    ARCHIVE DESTINATION ${PROJECT_BINARY_DIR}/lib
    PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/public_headers"
  )

install(FILES hello_public.h
    DESTINATION ${PROJECT_BINARY_DIR}/public_headers)

这将为库生成解决方案,包括分阶段 .lib 的INSTALL项目和公共标头。它还会生成 hellolib-config.cmake ,这是我对 find_package()使用的理解。

我的其他目录(项目)只有两个文件, world.cpp CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.9)
project (helloworldexe)

add_executable(helloworldexe hello.cpp)

set(hellolib_DIR "C:/deleteMe/cmake/out/lib")
find_package(hellolib REQUIRED)

#----- not sure how to do below? -----
#include_directories(${hellolib_INCLUDE_DIRS})

target_link_libraries (helloworldexe hellolib)

以上似乎成功触发 find_package 并将 hellolib.lib 添加到可执行项目中。但是我错过了从lib添加导出的公共头文件的调用。不知道是不是我,我发现CMake文档相当混乱;各种在线视频和论坛讨论"现代cmake" vs"经典的cmake"只是增加了混乱。任何帮助将不胜感激!

0 个答案:

没有答案