【CMake】write_file() コマンドの徹底解説! ファイル書き込みをマスターしよう


write_file() は、CMake の "Commands" におけるファイル書き込みコマンドです。指定されたファイルにコンテンツを書き込み、ファイルが存在しない場合は作成します。

構文

write_file(
  [APPEND]
  <filename>
  <content>
  ...
)

引数

  • <content>: ファイルに書き込むコンテンツ。
  • <filename>: コンテンツを書き込むファイルのパス。
  • APPEND: オプションで指定します。既存のファイルにコンテンツを追記します。

write_file(
  myfile.txt
  "Hello, world!"
)

上記の例では、"myfile.txt" というファイルに "Hello, world!" という文字列が書き込まれます。ファイルが存在しない場合は新規に作成されます。

  • ファイル入出力を行う場合は、configure_file() コマンドを使用することを推奨します。
  • write_file() で生成されたファイルは、CMake の入力として使用できません。これは、無限ループにつながる可能性があるためです。
  • write_file() は、バイナリデータを含むファイルの書き込みにも使用できます。
  • write_file() は、CMake バージョン 3.0 以降で非推奨になっています。代わりに file(WRITE) コマンドを使用することを推奨します。


ファイルに文字列を書き込む

cmake_minimum_required(VERSION 3.0)

project(myproject)

write_file(
  myfile.txt
  "Hello, world!"
)

ファイルに複数行の文字列を書き込む

cmake_minimum_required(VERSION 3.0)

project(myproject)

write_file(
  myfile.txt
  "This is a line of text.\n"
  "This is another line of text.\n"
  "This is the last line of text.\n"
)

既存のファイルにコンテンツを追記する

cmake_minimum_required(VERSION 3.0)

project(myproject)

write_file(
  APPEND
  myfile.txt
  "This is additional content.\n"
)

バイナリデータをファイルに書き込む

cmake_minimum_required(VERSION 3.0)

project(myproject)

set(binary_data "This is binary data.")

write_file(
  myfile.bin
  BINARY
  ${binary_data}
)
  • BINARY オプションを使用して、バイナリデータをファイルに書き込むことができます。
  • APPEND オプションを使用して、既存のファイルにコンテンツを追記できます。
  • 上記の例では、"myfile.txt"、"myfile.txt"、"myfile.txt"、"myfile.bin" というファイルにコンテンツが書き込まれます。
  • write_file() コマンドは、ファイルにコンテンツを書き込みます。
  • project() コマンドは、プロジェクトの名前を定義します。
  • 上記のコードは、CMake バージョン 3.0 を使用しています。


file(WRITE) コマンド

file(WRITE) コマンドは、write_file() コマンドよりも新しい方法です。構文と機能は write_file() に似ていますが、いくつかの点が改善されています。

file(WRITE
  <filename>
  [APPEND]
  <content>
  ...
)

利点

  • エラー処理が改善されています。
  • write_file() よりも高速です。
  • CMake バージョン 3.0 以降で推奨されています。

file(WRITE
  myfile.txt
  "Hello, world!"
)

configure_file() コマンド

configure_file() コマンドは、テンプレートファイルから生成されたファイルを書き込むために使用されます。テンプレートファイルには、CMake 変数で置き換えられるプレースホルダを含めることができます。

configure_file(
  myfile.txt.in
  myfile.txt
  COPYONLY
)

利点

  • CMake 変数を使用して、ファイルの内容をカスタマイズすることができます。
  • テンプレートを使用して、ファイルを動的に生成することができます。

set(name "My Name")

configure_file(
  myfile.txt.in
  myfile.txt
  COPYONLY
)

myfile.txt.in

Hello, ${name}!

カスタム CMake モジュール

独自の CMake モジュールを作成して、ファイル入出力を行うこともできます。

利点

  • 複雑なファイル入出力タスクを処理するために、より柔軟な方法を提供します。

# MyWriteFile.cmake モジュール

cmake_minimum_required(VERSION 3.0)

function(my_write_file filename content)
  if(NOT EXISTS "${filename}")
    file(WRITE "${filename}" "${content}")
  else()
    message(WARNING "File '${filename}' already exists.")
  endif()
endfunction()
# main CMake ファイル

cmake_minimum_required(VERSION 3.0)

project(myproject)

include(MyWriteFile.cmake)

my_write_file(myfile.txt "Hello, world!")
  • 最適な方法は、具体的なニーズによって異なります。
  • 上記の方法はほんの一例です。CMake には、ファイル入出力を行うための他にも様々な方法があります。