2015年3月12日木曜日

gfortranを使った依存関係の出力

Fortran でモジュールごとにファイルを分けてコンパイルするようなケースでの話。

Makefile に hoge.o とか fuga.mod とかの依存関係を手書きしたりするんだけど、数が増えてくるとめんどくさいし間違えやすいよね。

実は gfortran には依存関係を出力する機能がある(4.9.2で確認)。

オプション -M または -MM が依存関係を出力させるオプションだ。同時に -cpp も指定する必要がある。そのままだと標準出力に出力されるが -MF file を指定してファイルに出力させることもできる。

例えば hoge.f90 の依存関係を hoge.d に出力させるなら次のようにする。

$ gfortran -cpp -MM -MF hoge.d hoge.f90

ここで hoge.f90 が 内部で USE fuga としていたとすると hoge.d は次のようになる。

hoge.o: hoge.f90 fuga.mod

しかし、コマンドの実行に先立って fuga.mod が存在していなければならない。

あれ?

fuga.f90 を先にコンパイルするってわかってたら最初から Makefile にそう書くってーの!

つかえねーじゃん!!

2015年3月3日火曜日

Project Euler に参加してみた

Project Euler っていうのを知ったので参加してみた。

数学の問題 (簡単なものから難しいものまである) をプログラムを作って解くというものだ。

探せば問題文の和訳が落ちているけれど、英語の練習だと思って和訳は見ないでやってみる。使用言語は自由なので Fortran でエントリー。

結果の数値を入力して正解かどうか判定するだけなので、間違っていてもどう間違っているかはわからない。

いきなり2問目で条件を見落としてちょっと悩む。

3問目では 32bit 長で表現できない数字が出てきた。どうしようかと思ったけど int64 を使って逃げる。組み込みの型で表現しきれないのが出てきたらどうしようかな?

暇なときにゆるりと進めていくか。

2015年3月2日月曜日

Emacs 24.4 32bit 版のバイナリ (IME パッチをあてたもの)

32bit 版の Emacs 24.4 をビルドしてみた のその後。

いろいろ試した結果できた 32bit 版 Emacs 24.4 のバイナリはこちら。
emacs-24.4-IME-patched-x86_64-pc-mingw32.zip

Windows 8.1 64 bit に 64bit 版 MSYS2 をインストールし、 mingw-w64-i686 (32bit 版の開発環境) でビルドしている。

同梱の DLL は mingw64-w64-i686 からコピーしたもの。