CMake で静的ライブラリと動的ライブラリを同時に作るのは可能だが、手間がかかる ― 2021年05月31日 09時28分38秒
CMake 2.8.8 から登場した object library を使うと、若干簡略化できる。また、-fPIC を明示的に有効にする必要がある。PIC のオプションはライブラリ毎でも出来るが、ここでは全体指定をして、全て PIC でコンパイルをしている。
また、ライブラリには静的ライブラリと動的ライブラリに別の名前を付けなければならない。静的ライブラリは .a で動的ライブラリは .so で終るので、名前の衝突は起きないのだが、これは CMake のライブラリの処理の制限。TARGET_OBJECT を用いて、オブジェクトファイル名を取得する。
% cat CMakeLists.txt
project(deal_library)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
add_library(obj_lib OBJECT a.c b.c)
add_library(alpha_shared SHARED $<TARGET_OBJECTS:obj_lib>)
add_library(alpha_static STATIC $<TARGET_OBJECTS:obj_lib>)
なお、これを cmake --build 処理した後には、libalpha_shared.so と libalpha_static. が生成される。
前回。
最近のコメント