古いFortran(FORTRAN77だ!)のプログラムをコンパイルする必要があって、GNU Fortran をインストールした。
GNU Fortran の公式サイトは↓ここにあるんだけど、どこからダウンロードすればいいんだか、ひどくわかりにくい。
さいわい、丁寧に説明してくれているページを見つけた。日付が古いが内容は古くなってない。
公式サイトのここをクリックして、次の画面のここをクリックして……みたいなことをグダグダと書かれているが――という言い方はよくないな。丁寧に説明してくれてるんだからありがたい。悪いのはわかりにくい公式サイトだ――要するに TDM GCC をインストールすれば GNU Fortran もインストールできる。TDM GCC のサイトは↓ここ。
バージョン10.3.0が最新だった。ダウンロードしたのは64ビット版のtdm64-gcc-10.3.0-2.exe。
このファイルは Windows のインストーラになってるので、普通にインストール作業すれば何も困ることはない。ただ、デフォルトでは Fortran はインストールされないので、途中で Fortran をインストールするようにチェックを入れる必要がある。
さて、インストールできたので早速試してみた。コマンドは gfortran
。
takatoh@sofa: sample > gfortran --version GNU Fortran (tdm64-1) 10.3.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
コンパイルするには引数にソースファイルの名前を指定すればいい。-o
オプションはコンパイルされた実行ファイルの名前の指定。省略すると a.exe になる。
takatoh@sofa: sample > gfortran -o auto auto.for
ソースファイルの拡張子が .for
だと FORTRAN77 だと見做すらしい。.f90
なら Fortran90。
こんな調子で20個ほどコンパイルしたんだけど、そのひとつで次のような warning がでた。
takatoh@sofa: sample > gfortran -o ohsp ohsp.for ohsp.for:70:72: 70 | IF(RLOG-R1) 170,180,180 | 1 Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
Arithmetic IF statement ってなんだと思って調べたら、算術IFっていうんだと。
↓ここに説明がある。
条件式の値が負かゼロか正かで分岐して指定された番号の文へジャンプする。条件式は論理式じゃなくて算術式、つまり評価すると数値になる式。こんな感じ:
IF(X-10) 100,200,300 100 ... GO TO 500 200 ... GO TO 500 300 ... GO TO 500 500 ...
X-10
が負なら100へ、ゼロなら200へ、正なら300へジャンプする。
もう少し調べてみたら、論理IF よりも 算術IF のほうが先にあったらしい。
FORTRAN77 って学生の時にやったんだけど、こんなの覚えてないよ。
それはさておき、こういう古いソースコードでもコンパイルできるってのはすごいことだよな。
ただ、デフォルトでは Fortran はインストールされないので、途中で Fortran をインストールするようにチェックを入れる必要がある。
というところでご質問です。
tdm64-gcc-10.3.0-2のinstallerをdownloadし実行する際、
Customインストールを選択したとしても、gfortran の選択チェックボックスが出てきません。なぜ??(Components / gcc の下は、/ core と c++ だけです)
なぜ?と聞かれても僕はこれでうまくいきましたが……としか答えられないんですが。
いま、いったんアンインストールしてから再度インストールを実行してみましたが、デフォルトでチェックの入った core と c++ のほかに fortran、ada、objc、openmp、gccjit が選択可能ですね。インストールタイプがCustomでなくても選択肢自体は同じようです。
何か前提条件があるのかもしれませんが、先日調べた時にはなかったように記憶しています。
お役に立てず、申し訳ない。