次のレイアウトがあります。
_top_project
+ subproject1
+ subproject2
_
_subproject1
_および_subproject2
_はそれぞれ静的ライブラリを作成します。これらの静的ライブラリを_top_project
_レベルで単一の共有ライブラリにリンクしたいと思います。
これまでに収集した情報は次のとおりです。
-fPic
_(Windows以外のすべてで必要)を使用してコンパイルするか、すべての静的ライブラリを解凍します(例:ar
)そしてそれらを共有ライブラリに再リンクします(これはエレガントで移植性のないソリューションだと思います)add_library
_コマンドに明示的に指定する必要があります。何らかの理由で理解できないため、単にadd_library(${PROJECT_NAME} SHARED subproject1 subproject2)
と書いても期待どおりに機能しません(基本的に空のライブラリが作成され、依存関係)何かご意見は?
それを行う別の方法は、すべてのプロジェクトのソースファイルとヘッダーファイルのパスを提供し、それらを一緒にビルドして.soを生成することです。これは通常、静的ライブラリを作成してからそれらから共有ライブラリを作成する代わりに、推奨される方法です。
基本的に、次のことを行う必要があります。
FILE(GLOB subproject1_sources
<sub_project1_lib_sources_dir>/file1.c
<sub_project1_lib_sources_dir>/file2.c //... etc
)
FILE(GLOB subproject2_sources
<sub_project2_lib_sources_dir>/file1.c
<sub_project2_lib_sources_dir>/file2.c //... etc
)
FILE(GLOB topProject_sources
<top_project_lib_sources_dir>/file1.c
<top_project_lib_sources_dir>/file2.c //... etc
)
include_directories("<sub_project1_lib_sources_dir>")
include_directories("<sub_project2_lib_sources_dir>")
include_directories("<top_project_lib_sources_dir>") //should be "." if you're building from here
add_library(topProject SHARED ${topProject_sources} ${subproject1_sources} ${subproject2_sources})