2017-05-16 10 views
1

私は内部の個人用プロジェクト用のC++共有ライブラリを作成していますが、リンク/コンパイルプロセスにはcmakeを使用しています。今、私のCMakeLists.txtファイルは、私は正常に私のファイルをコンパイルしたが、私は「カプセル化」について少し心配です知っているこの特定のヘッダーを持つC++共有ライブラリを展開する

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

あなたの質問に基づいてこれを既に知っているかどうかはわかりませんが、あなたの現在のCMakeLists.txtはヘッダ。サイドノートでは

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

、それは相対パスを使用するより良いプラクティスです:特定のものをインストールするには、あなたがする必要があるすべては、あなたがCMakeののコマンドをインストールするには、それらをインストールして渡したい.hファイルをリストでありますあなたのinstall(DESTINATION)引数これらは、CMAKE_INSTALL_PREFIX変数に関連して解釈されます。デフォルト値は実際には/usr/localです。

実際に人が内部クラスにリンクできないようにするには、GCCのvisibility control

関連する問題