我很难理解CMakes安装/导出命令的正确用法。我希望有一个 CMakeLists.txt ,它可以使用find_package
命令为(不同的,独立的)CMake项目生成一个静态库(解决方案)。
我有一个包含四个文件的根文件夹:
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"只是增加了混乱。任何帮助将不胜感激!