CMake: Fortran ソースコードの事前処理を制御する CMAKE_Fortran_PREPROCESS 変数
CMake 変数 CMAKE_Fortran_PREPROCESS
は、Fortran ソースコードの事前処理を制御するために使用されます。事前処理とは、コンパイル前にソースコードを加工する処理です。具体的には、マクロ展開、インクルードファイルの挿入、条件付きコンパイルなどを行うことができます。
デフォルト値
CMAKE_Fortran_PREPROCESS
のデフォルト値は ON
です。これは、すべての Fortran ターゲットに対して事前処理が有効になることを意味します。
設定方法
CMAKE_Fortran_PREPROCESS
は、以下の方法で設定できます。
- コマンドラインで
-DCMAKE_Fortran_PREPROCESS=<value>
オプションを使用する - CMakeLists.txt ファイルで
set
コマンドを使用する
例
以下の例は、すべての Fortran ターゲットに対して事前処理を無効にする方法を示します。
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
set(CMAKE_Fortran_PREPROCESS OFF)
add_executable(myprogram main.f)
以下の例は、特定のターゲットに対してのみ事前処理を無効にする方法を示します。
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
add_executable(myprogram main.f)
target_compile_options(myprogram PRIVATE -DCMAKE_Fortran_PREPROCESS=OFF)
- ソースファイル単位で事前処理を制御したい場合は、
Fortran_PREPROCESS
ターゲットプロパティを使用します。 - 一部のコンパイラでは、
CMAKE_Fortran_PREPROCESS
をOFF
に設定しても効果がない場合があります。
CMAKE_Fortran_PREPROCESS
変数は、Fortran プロジェクトのビルドプロセスを制御するための多くのオプションのうちの 1 つです。- CMake は、クロスコンパイルを含むさまざまな開発環境で Fortran プロジェクトをビルドするための強力なツールです。
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
set(CMAKE_Fortran_PREPROCESS OFF)
add_executable(myprogram main.f)
このコードは、myproject
という名前のプロジェクトを作成し、main.f
という名前の Fortran プログラムをビルドします。すべての Fortran ターゲットに対して事前処理が無効になっているため、main.f
ファイルは事前処理されずにコンパイルされます。
例 2: 特定のターゲットに対してのみ事前処理を無効にする
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
add_executable(myprogram main.f)
target_compile_options(myprogram PRIVATE -DCMAKE_Fortran_PREPROCESS=OFF)
例 3: カスタムマクロを定義する
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
set(MY_MACRO "MY_VALUE")
add_executable(myprogram main.f)
target_compile_options(myprogram PRIVATE -DCMAKE_Fortran_PREPROCESS=ON -D"MY_MACRO=${MY_MACRO}")
このコードは、myproject
という名前のプロジェクトを作成し、main.f
という名前の Fortran プログラムをビルドします。MY_MACRO
という名前のマクロが MY_VALUE
に定義され、main.f
ファイルの事前処理に使用されます。
説明
- クロスコンパイルする場合は、適切なツールチェーンファイルを指定する必要があります。
- CMake の最新バージョンを使用していることを確認してください。
代替方法
以下に、CMAKE_Fortran_PREPROCESS
の代替方法をいくつか紹介します。
Fortran コンパイラオプションを使用する
ほとんどの Fortran コンパイラは、事前処理を制御するためのオプションを提供しています。これらのオプションを使用して、マクロ展開、インクルードファイルの挿入、条件付きコンパイルなどを設定することができます。
例
以下の例は、gfortran
コンパイラを使用してマクロ MY_MACRO
を定義し、main.f
ファイルの事前処理に使用するものです。
gfortran -DMY_MACRO=MY_VALUE main.f -o myprogram
Fortran プリプロセッサを使用する
Fortran プリプロセッサは、スタンドアロンのツールとして使用できます。プリプロセッサを使用して、ソースコードを事前処理し、#include
ディレクティブを展開し、マクロを展開することができます。
例
以下の例は、cpp
という名前の Fortran プリプロセッサを使用して main.f
ファイルを事前処理し、出力ファイルを main.i
に保存する方法を示します。
cpp main.f > main.i
CMake ターゲットプロパティを使用する
CMake ターゲットプロパティを使用して、特定のターゲットに対して事前処理設定を指定することができます。この方法は、複数のターゲットを持つプロジェクトで事前処理設定を個別に制御したい場合に便利です。
例
以下の例は、myprogram
ターゲットに対して事前処理を無効にする方法を示します。
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
add_executable(myprogram main.f)
target_compile_options(myprogram PRIVATE -DCMAKE_Fortran_PREPROCESS=OFF)
CMake カスタムコマンドを使用する
CMake カスタムコマンドを使用して、独自の事前処理ロジックを実装することができます。この方法は、複雑な事前処理要件を満たす必要がある場合に便利です。
例
以下の例は、mypreprocess
という名前の CMake カスタムコマンドを作成し、main.f
ファイルを事前処理する方法を示します。
cmake_minimum_required(VERSION 3.18)
project(myproject LANGUAGES Fortran)
register_custom_command(MYPREPROCESS
COMMAND ${CMAKE_Fortran_COMPILER} -E main.f > main.i
OUTPUT_FILE main.i
)
add_executable(myprogram main.i)
add_dependencies(myprogram MYPREPROCESS)
- CMake の最新バージョンを使用していることを確認してください。
- 上記の代替方法はそれぞれ長所と短所があります。プロジェクトのニーズに合った方法を選択してください。
- Fortran プリプロセッサドキュメント: (Fortran プリプロセッサごとにドキュメントを参照する必要があります)
- Fortran コンパイラドキュメント: (Fortran コンパイラごとにドキュメントを参照する必要があります)