使用特定标头部署c ++共享库

时间:2017-05-16 02:19:52

标签: c++ cmake shared-libraries

我正在为内部个人项目创建一个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文件,因为有些类在我的库上下文之外使用没有多大意义。类似于库的“私有”类,只暴露那些人们会在外面使用的类

1 个答案:

答案 0 :(得分: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