【问题标题】:Deploy c++ shared library with specific headers部署具有特定标头的 c++ 共享库
【发布时间】:2017-05-16 02:19:52
【问题描述】:

我正在为一个内部个人项目创建一个 c++ 共享库,并且我正在使用 cmake 进行链接/编译过程。现在我的 CMakeLists.txt 文件看起来像这样

cmake_minimum_required(VERSION 3.7)
project(borges)

set(CMAKE_BUILD_TYPE Release)

set(CMAKE_CXX_STANDARD 11)

include_directories(include)

file(GLOB SOURCES "src/*.cpp")

add_library(borges SHARED ${SOURCES})

install(TARGETS borges DESTINATION /usr/local/lib)

我已经成功编译了我的文件,但我知道我有点担心“封装”。我想知道是否有办法只公开某些 .h 文件,因为有些类在我的库上下文之外使用没有多大意义。类似于库的“私有”类,只公开那些人们会在外部使用的类

【问题讨论】:

    标签: c++ cmake shared-libraries


    【解决方案1】:

    根据您的问题,我不确定您是否已经知道这一点,但是您当前的 CMakeLists.txt 没有安装任何标题。要安装特定的,您需要做的就是列出要安装的 .h 文件并将它们传递给 CMake 的安装命令:

    set(HEADERS_TO_INSTALL foo.h bar.h borges.h)
    # ...
    install(FILES ${HEADERS_TO_INSTALL} DESTINATION include)
    

    附带说明,在 install(DESTINATION) 参数中使用相对路径会更好。这些将相对于CMAKE_INSTALL_PREFIX 变量进行解释,其默认值实际上是/usr/local

    如果您真的想禁止人们链接到内部类,那么您可能需要查看 GCC 的 visibility control

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2019-06-04
      相关资源
      最近更新 更多