如何使用 CMake 安装软件包(由 .h 和 .lib .dll 组成)?

How do I install a package (consisting of .h and .lib .dll) with CMake?

提问人:le1nax 提问时间:10/18/2023 更新时间:10/18/2023 访问量:113

问:

我得到了一个包,该包与 和 一起发布。现在,我正在尝试使用 CMake 将此包集成到我的 cpp 项目中。.h.dll.lib

我使用了 packetmanager vcpkg,所以我尝试通过创建端口将此包添加到 vcpkg。从本质上讲,此端口使用 签出 GitHub 存储库,并使用 安装库。vcpkg_from_githubvcpkg_cmake_install

因此,我创建了一个仅包含 and 和 的 GitHub 存储库,它(根据我的理解)应该安装二进制文件并包含调用时存储库的文件。.h.dll.libCMakeLists.txtvcpkg_cmake_install

现在我的问题是这应该是什么样子。 我对此的任意尝试:CMakeLists.txtCMakeLists.txt

cmake_minimum_required (VERSION 3.17)
project(medit-libs CXX)  

add_library(pcanbasic STATIC IMPORTED)
set_target_properties(pcanbasic PROPERTIES
    IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/lib/PCANBasic.lib"
)

target_include_directories(pcanbasic INTERFACE "{CMAKE_CURRENT_LIST_DIR}/include")

include(GNUInstallDirs)

install(TARGETS pcanbasic
    EXPORT pcanbasic-targets
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include
)
install(EXPORT pcanbasic-targets
    FILE pcanbasic-targets.cmake
    NAMESPACE pcanbasic::
    DESTINATION lib/cmake/pcanbasic 
)
install(FILES pcanbasic.h
    DESTINATION include
)

失败。

谁能告诉我

  1. 如果我正在做的将库集成到我的外部项目中的方法是正确的/最佳的
  2. 实际上应该是什么样子?CMakeLists.txt

我也很乐意采用其他解决方案,将我的库文件集成到 CMake 托管项目中。

C++ cmake DLL vcpkg

评论

1赞 pptaszni 10/18/2023
90%确定你的方法是错误的,但我也不完全确定你想做什么。如果您想在项目中使用第三方预编译库,请创建它并将其放置在您的(最好)目录下。然后只需在您的项目中找到并使用它,这取决于您是创建导入的库还是仅定义一些变量。如果您是该库的所有者,并希望使其可被其他项目安装和发现,请遵循 cmake 文档。Find<package>.cmakeROOT/cmakefind_packageFOO_INCLUDE_DIRS
1赞 pptaszni 10/18/2023
从这个答案模块模式。这里如何用 cmake 创建包该答案的解决方案 2 显示了如何很好地导出所有包信息,例如包含目录、编译器选项等。
0赞 TooTone 10/18/2023
“我也很乐意采用其他解决方案,将我的库文件集成到 CMake 托管项目中。” 比将包放入 vcpkg 更容易。
0赞 le1nax 10/19/2023
@pptaszni我首先尝试做的是从 vcpkg 端口获取我的库,我按照本指南创建了该端口:devblogs.microsoft.com/cppblog/...。从本质上讲,在名为库的文件中,通过调用 来构建/安装库。我一直感到困惑的是,我想使用预编译的库文件(.lib .dll)和.h,这就是为什么这种方法对我来说很麻烦。portfile.cmakevcpkg_cmake_install
1赞 le1nax 10/19/2023
@pptaszni无论如何,创建文件似乎更直观,因为我获得了第 3 方预编译库。Find<package>.cmake

答: 暂无答案