2

コンパイル中にenvvar"XYZ"が設定されている場合は、次の部分が必要です。

write (STDOUT,*) "Compiled with XYZ"
here one more function call bla()

バイナリにコンパイルされます。そうでない場合は、そうでないより。それを行う方法はありますか?どうもありがとう!

4

3 に答える 3

7

コンパイル中に環境変数をチェックすることはできませんが、オプションをコンパイラーに渡すことはできます。これは前処理と呼ばれます。これは詳細に文書化されていませんが、少なくともgfortranとIntelifortで機能します。コンパイル行で、「-DMYOPTION」(または選択したオプション名)を使用するかどうかを指定します。次に、コードで:

#ifdef MYOPTION
Fortran source code
#else
Fortran source code
#endif

どうやら、プリプロセッサの行は最初の列から開始する必要があります。

ファイルタイプ「F90」を使用すると、プリプロセッサが自動的に呼び出されます。それ以外の場合は、コンパイラオプションを使用してこのステップを呼び出すことができます。

多分これはあなたのニーズに答えますか?そうでない場合は、コマンドスクリプトを使用して環境変数を確認し、その値に応じて異なるコンパイルコマンドを使用して、プリプロセッサメソッドが環境変数に応答するようにすることができます。

もちろん、組み込みのget_environment_variableを使用して、実行時に環境変数を確認できます。値に応答するifステートメントを使用する方が簡単な場合があります。

于 2011-04-13T17:15:42.573 に答える
1

Fortran 2008標準の一部として、コンパイラー・オプションとそれがコンパイルされたバージョンを見つけるための組み込み関数があります。 コンパイラオプションコンパイラバージョン。Fortranコンパイラーは、新しい標準に徐々に対応しています。gfortranにはそれがありますが、ifort12にはまだないようです。

program compilerinfo
    use iso_fortran_env
    implicit none

    print *,'This program was compiled with ', compiler_version()
    print *,'with flags ', compiler_options()
end program compilerinfo

と実行すると

$ ./compilerinfo
 This program was compiled with GCC version 4.6.0
 with flags -mtune=generic -march=x86-64
于 2011-04-13T19:19:41.387 に答える
0

いいえ非常に最新のFortranコンパイラだけがそのような機能を提供します。

最も近いメカニズムは、環境変数を取得し、必要な情報を含むFortranサブルーチンを作成するプログラムを作成することです。プロジェクトビルドに追加します。

  1. プログラムを実行して環境変数を取得し、サブルーチンを作成します
  2. サブルーチンをコンパイルします
  3. オブジェクトをプロジェクトの残りの部分にリンクします。

Fortran2008以降のコンパイラを反映するように編集

于 2011-04-13T16:18:00.210 に答える