CMake - ファイル

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要



コピー

configure_fileコマンドを使用して、ソースディレクトリ内のファイルをビルドディレクトリへコピーする。
また、@ONLYオプションを付加して、@<文字列>@形式の変数をファイル内で置換することもできる。

 configure_file(<コピー元のファイルのパス> ${CMAKE_CURRENT_BINARY_DIR}/<コピー先のファイルのパス> @ONLY)

 # 例:
 # /<プロジェクトディレクトリ>/etc/hoge.conf.inファイルを/<ビルドディレクトリ>/etcディレクトリにコピー
 # @ONLYオプションを付加して、hoge.conf.inファイル内の@<文字列>@形式の変数をCMake変数で置換
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/hoge.conf.in ${CMAKE_CURRENT_BINARY_DIR}/etc/hoge.conf @ONLY)



インストールルール

installコマンドを使用して、ファイルを任意のディレクトリにインストールする。
CACHE PATHオプションを付加して独自の変数を定義することにより、CMakeのコマンドラインオプション-D<オプション名>=を付加してパスをカスタマイズすることができる。

 install(FILES <インストール元のファイルのパス> DESTINATION <インストール先のディレクトリのパス>)
 
 # 例:
 # /<ビルドディレクトリ>/etc/hoge.confファイルを、CMake変数SYSCONF_DIRで指定したディレクトリへインストール
 # cmakeコマンドの実行時にデフォルトのインストールディレクトリを上書きする場合は、cmake .. -DSYSCONF_DIR=$HOME/.config/hogeのように指定する
 set(SYSCONF_DIR "/etc/hoge" CACHE PATH "Directory to install hoge.conf")
 install(FILES ${CMAKE_BINARY_DIR}/hoge.conf DESTINATION ${SYSCONF_DIR})


インストールするファイルに実行権限を付与する場合は、installコマンドにPROGRAMオプションを付加する。

 # 実行権限を付与して、インストール先のディレクトリにコピーする
 install(PROGRAMS
    ${CMAKE_CURRENT_BINARY_DIR}/sample.sh
    DESTINATION ${CMAKE_INSTALL_BINDIR}
 )



実行ファイルの構築 (add_executableコマンド)

add_executableコマンドは、CMakeにソースファイルのセットから実行ファイルを作成する。

 add_executable(
    <ターゲット名>
    <ソースコードファイル名 1>
    <ソースコードファイル名 2>
    # ...略
 )
 
 # 例. myAppまたはmyApp.exeという名前の実行ファイルが生成される
 add_executable(
    myApp
    main.cpp
 )


<ターゲット名>には、英数字、アンダースコア、ハイフンを使用することができる。
CMakeプロジェクトのビルドが正常に終了すると、<ターゲット名>として実行ファイルが作成される。

ターゲット名は、CMakeの機能であるターゲットプロパティでカスタマイズすることもできる。
また、ターゲット名を変更して、add_executableコマンドを複数回呼び出すことにより、1つのCMakeLists.txtファイル内で複数の実行ファイルを定義することができる。

ただし、同じターゲット名を複数のadd_executableコマンドで使用する場合は、CMakeは失敗してエラーがハイライトされる。

 # CMakeプロジェクトの例
 cmake_minimum_required(VERSION 3.2)
 
 # C++コンパイラは未使用とするため、プラットフォームが持っていない場合に備えて、projectコマンドで使用されないように指定する
 project(MyApp VERSION 4.7.2 LANGUAGES C)
 
 # メインの実行ファイルを生成
 add_executable(
    mainTool
    main.c
    debug.c # リリースビルドのために最適化される
 )
 
 # サブの実行ファイルの生成
 add_executable(
    testTool
    testTool.c
 )



ライブラリの構築 (add_libraryコマンド)

CMakeは様々な種類のライブラリのビルドをサポートしている。
ライブラリを作成して使用する場合、add_libraryコマンドを使用する。

 add_library(
    <ターゲット名>
    [<STATIC または SHARED または MODULE>]
    [EXCLUDE_FROM_ALL]
    <ソースコードファイル名 1>
    <ソースコードファイル名 2>
    # ...略
 )


<ターゲット名>は、CMakeLists.txtファイル内でライブラリを参照するために使用される。
ビルドされたライブラリ名は、<ターゲット名>となる。

EXCLUDE_FROM_ALLオプションは、add_executableコマンドと同様、ライブラリがデフォルトのALLターゲットに含まれないようにする。
構築するライブラリの種類は、STATICSHAREDMODULEのうちの1つを指定する。

  • STATICオプション
    静的ライブラリまたはアーカイブを指定する。
    Windowsでは、デフォルトのライブラリ名は、<ライブラリファイル名>.libとなる。
    Linuxでは、デフォルトのライブラリ名は、lib<ライブラリファイル名>.aとなる。
  • SHARED
    共有ライブラリまたは動的ライブラリを指定する。
    Windowsでは、デフォルトのライブラリ名は、<ライブラリファイル名>.dllとなる。
    Linuxでは、デフォルトのライブラリ名は、lib<ライブラリファイル名>.soとなる。
  • MODULE
    共有ライブラリに似ているが、ライブラリや実行ファイルに直接リンクされるのではなく、実行時に動的にロードされることを意図しているライブラリを指定する。
    これらは、ユーザがロードするかどうかを選択できるプラグイン、または、オプションのコンポーネントである。
    Windowsでは、DLL向けのインポートライブラリは作成されない。


よほどのことがない限り、STATICまたはSHAREDオプションは、それが必要であることが分かるまで付加しないことを推奨する。
これにより、プロジェクト全体を通して、スタティックライブラリかダイナミックライブラリかをより柔軟に選択することができる。

ビルドするライブラリの種類を定義するオプションを省略することも可能である。
特定のライブラリが必要でない限り、プロジェクトファイルには指定せずに、プロジェクトの構築時に開発者が選択できるようにすることが望ましい。
そのような場合、ライブラリはSTATICSHAREDのどちらかになり、変数BUILD_SHARED_LIBSの値により選択される。

変数BUILD_SHARED_LIBStrueを代入する場合はライブラリのターゲットはダイナミックライブラリ、それ以外の場合はスタティックライブラリとなる。
add_libraryコマンドを呼び出すたびに変更する必要がなく、1ヶ所に記述するだけで設定を変更することができる。
ただし、add_libraryコマンドを呼び出す前に、変数BUILD_SHARED_LIBSを記述する必要がある。

 set(BUILD_SHARED_LIBS YES)


変数BUILD_SHARED_LIBSを設定する方法として、cmakeコマンドに-DBUILD_SHARED_LIBSオプションを付加する方法がある。

cmake -DBUILD_SHARED_LIBS=YES /path/to/source