LoginSignup
1
0

More than 1 year has passed since last update.

CMakeチュートリアル4【ダイナミック/スタティックリンク】

Posted at

前回は変数・環境変数・分岐・ループでした
ずっと単一アプリケーションで開発するわけにもいかないので、今回はライブラリと複数のプロジェクトについて解説します

チュートリアル4

CMakeでのライブラリの作り方、複数プロジェクトの作成について解説していきます

ルートプロジェクト

${CMAKE_SOURCE_DIR}は予約語でルートのCMakeLists.txtがあるディレクトリを指します
ライブラリ・アプリケーションの両者で必要になるディレクトリのため、変数\${MYLIB_INCLUDE_DIRS}にtutorial4/mylib/includeを代入しています

add_subdeirectory(ディレクトリ名)でサブディレクトリのCMakeLists.txtを解析します
指定したサブディレクトリには必ずCMakeLists.txtが必要です

cmake_minimum_required(VERSION 3.13)

project(cmake_tutorial_4)

set(MYLIB_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/mylib/include")

add_subdirectory(mylib)
add_subdirectory(tutorial_4)

ライブラリ

ライブラリのプロジェクトを作成するにはadd_libraryを使用します
ダイナミック/スタティックライブラリのどちらかを作成することができます
指定方法は後述します

add_library(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/mylib.cc)

実行ファイル

add_dependenciesで依存関係を定義します
cmake_tutorial_4はmylibに依存する、つまりcmake_tutorial_4よりmylibが先にビルドされます

target_link_librariesでライブラリをリンクします
今回は同じCMakeプロジェクトなのでmylibというプロジェクト名で自動的にライブラリへのパスが解決されます
外部ライブラリを使用する場合はパスが必要になります(これについては別のセクションで記述します)

add_dependencies(${PROJECT_NAME} mylib)

target_include_directories(${PROJECT_NAME} PRIVATE ${MYLIB_INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} mylib)

ビルド

cd cmake_tutorials
cmake -S tutorial_4 -B build/tutorial_4 -D BUILD_SHARED_LIBS=ON
cmake --build build/tutorial_4

今回は-D BUILD_SHARED_LIBS=ONが追加されていることに注意してください
-D 変数名=値・文字列でCMakeLists.txt内部の変数の初期値を代入する事ができます
BUILD_SHARED_LIBS=ONにする事でダイナミックリンクを作成するように指定しています
スタティックリンクを作成する場合はBUILD_SHARED_LIBS=OFF、もしくは何も設定しないでください(デフォルト値はOFF)


これでアプリケーション・ライブラリを作るための一通りは説明し終えました
次回はコンフィグレーションについて解説していこうと思います

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0