CMakeを使ってみた(3)ライブラリを作る

実行ファイルではなくライブラリを作る場合も大きく変わるところはない。add_executableのところをadd_libraryにすればいいだけだ。

例えばmylibというライブラリがsrc1.cppからなるとき、CMakeLists.txtは以下のようになる。

cmake_minimum_required(VERSION 2.8)
add_library(mylib src1.cpp)

デフォルトでは静的ライブラリが作られる。コンパイルのコマンドは変わらないが、その後arとranlibが呼ばれる。

/usr/bin/c++     -o CMakeFiles/mylib.dir/src1.cpp.o -c /home/ws/study-cmake/test/src1.cpp
/usr/bin/ar cr libmylib.a  CMakeFiles/mylib.dir/src1.cpp.o
/usr/bin/ranlib libmylib.a

共有ライブラリを作るときはSHAREDを指定する。

cmake_minimum_required(VERSION 2.8)
add_library(mylib SHARED src1.cpp)

実際に行われるコマンドは以下のとおり。

/usr/bin/c++   -Dmylib_EXPORTS -fPIC   -o CMakeFiles/mylib.dir/src1.cpp.o -c /home/ws/study-cmake/test/src1.cpp
/usr/bin/c++  -fPIC    -shared -Wl,-soname,libmylib.so -o libmylib.so CMakeFiles/mylib.dir/src1.cpp.o

コンパイル時に-fPICがつくのは良いが、mylib_EXPORTSというマクロが勝手に指定される。これが誤動作の原因になることはあまりないと思うが一応頭に入れておこう。リンク時は-fPICがつき、libmylib.soというsonameになる。