前提・実現したいこと
現在他のライブラリ(Eigen)に依存しているライブラリを自作しています.それを共有ライブラリとして配布したいのですが,どのようなディレクトリ構成すればよいかがわかりません.
現状
まず,以下のsamplelibが何にも依存していない自己完結のライブラリだとすると,以下のようなディレクトリ構成にして,
samplelib ├── inc │ ├── samplelib_xxx.h │ ├── samplelib_xxx.h │ ├── samplelib_xxx.h │ ├── ... ├── lib ├── libsamplelib.so (dynamic library)
build/ external/ ├──samplelib/ ... main.cpp CMakeLists.txt
以下のようなCMakeList.txtを書けばmain.cpp側からライブラリを呼び出せるという理解です.(もしかしたらこの時点で間違っているかもしれませんが...)
CMakeList.txt
1cmake_minimum_required(VERSION 3.5) 2project(samplelib_check CXX) 3 4 5include_directories(external/samplelib/inc) 6 7add_executable(main.exe main.cpp) 8 9target_link_libraries(main.exe samplelib)
ここでsamplelibがEigenに依存している場合,上記はEigenを見つけることができずにビルドが通りません.
ちなみに共有ライブラリsamplelibを作成する際は,Eigenのコードをgit submoduleとして管理し,以下のようなCMakeLists.txtでビルドしています.以下一部抜粋です.
CMakeLists.txt
1# Gather files and store paths in CMake variables 2file(GLOB LIBRARY_SOURCE_FILES ${PROJECT_SOURCE_DIR}/library/src/*.c*) 3file(GLOB LIBRARY_HEADER_FILES ${PROJECT_SOURCE_DIR}/library/inc/*.h*) 4 5# Set variable which indicates include directory 6set(LIBRARY_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/library/inc") 7 8# Add compilation target for our library 9add_library(samplelib SHARED ${LIBRARY_SOURCE_FILES} ${LIBRARY_HEADER_FILES}) 10target_link_libraries(samplelib PUBLIC Eigen3::Eigen)
質問
この場合,そもそもEigenのソースコードをexternal/以下のどこかに置く必要があるのでしょうか?またある場合はどのような構成で置くのがよいのでしょうか?
またこれがEigenのようなヘッダーオンリーライブラリではない場合(静的ライブラリや共有ライブラリの場合)はどのようにするのがよいのでしょうか?
ご回答お待ちしております.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。