常に最低限必要なバージョンを指定します cmake
cmake_minimum_required(VERSION 3.9)
プロジェクトを宣言する必要があります。cmakeそれは必須でありPROJECT_NAME、便利な変数を定義します(PROJECT_VERSIONそしてPROJECT_DESCRIPTIONこの後者の変数はcmake 3.9を必要とします):
project(mylib VERSION 1.0.1 DESCRIPTION "mylib description")
新しいライブラリターゲットを宣言します。の使用は避けてくださいfile(GLOB ...)。この機能は、コンパイルプロセスに精通している必要はありません。怠惰な場合は、次の出力をコピーして貼り付けますls -1 sources/*.cpp。
add_library(mylib SHARED
sources/animation.cpp
sources/buffers.cpp
[...]
)
VERSIONプロパティを設定します(オプションですが、良い方法です):
set_target_properties(mylib PROPERTIES VERSION ${PROJECT_VERSION})
のSOVERSIONメジャー番号に設定することもできVERSIONます。したがってlibmylib.so.1、へのシンボリックリンクになりlibmylib.so.1.0.0ます。
set_target_properties(mylib PROPERTIES SOVERSION 1)
ライブラリのパブリックAPIを宣言します。このAPIは、サードパーティアプリケーション用にインストールされます。プロジェクトツリーで分離することをお勧めします(include/ディレクトリを配置するなど)。プライベートヘッダーはインストールしないでください。ソースファイルと一緒に配置することを強くお勧めします。
set_target_properties(mylib PROPERTIES PUBLIC_HEADER include/mylib.h)
サブディレクトリを操作する場合、などの相対パスを含めることはあまり便利ではありません"../include/mylib.h"。したがって、インクルードディレクトリのトップディレクトリを渡します。
target_include_directories(mylib PRIVATE .)
または
target_include_directories(mylib PRIVATE include)
target_include_directories(mylib PRIVATE src)
ライブラリのインストールルールを作成します。でCMAKE_INSTALL_*DIR定義された変数を使用することをお勧めしますGNUInstallDirs:
include(GNUInstallDirs)
インストールするファイルを宣言します。
install(TARGETS mylib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
pkg-configファイルをエクスポートすることもできます。このファイルを使用すると、サードパーティのアプリケーションでライブラリを簡単にインポートできます。
という名前のテンプレートファイルを作成しますmylib.pc.in(詳細については、pc(5)のマンページ を参照してください)。
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@
libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
Name: @PROJECT_NAME@
Description: @PROJECT_DESCRIPTION@
Version: @PROJECT_VERSION@
Requires:
Libs: -L${libdir} -lmylib
Cflags: -I${includedir}
でCMakeLists.txt、@マクロを展開するルールを追加します(@ONLYフォームの変数を展開しないようにcmakeに依頼します${VAR})。
configure_file(mylib.pc.in mylib.pc @ONLY)
最後に、生成されたファイルをインストールします。
install(FILES ${CMAKE_BINARY_DIR}/mylib.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
cmake EXPORT機能を使用することもできます。ただし、この機能はcmakeあり、使用するのが難しいと感じています。
最後に、全体CMakeLists.txtは次のようになります。
cmake_minimum_required(VERSION 3.9)
project(mylib VERSION 1.0.1 DESCRIPTION "mylib description")
include(GNUInstallDirs)
add_library(mylib SHARED src/mylib.c)
set_target_properties(mylib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION 1
PUBLIC_HEADER api/mylib.h)
configure_file(mylib.pc.in mylib.pc @ONLY)
target_include_directories(mylib PRIVATE .)
install(TARGETS mylib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/mylib.pc
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)