2012-04-12 9 views
3

モジュールを使用するFortranプログラムを持っています。つまり、コンパイル時に.modファイルが作成されています。 -files from src/.o -filesをobj/と現在のフォルダのバイナリにすべて入れても問題なく動作します。のファイルをすべて使用するMakefileを書きました。Makefile:新しいフォルダ用のFortranモジュールのコンパイルを避ける

私は今、私は、calc1/Makefileをコピーcalc1/でタイプmake allとオブジェクト・ファイルがすでに存在しているので、それがないすべては、リンクである、すなわち、(calc1/例えば)異なる計算の異なるフォルダに私のプログラムを再コンパイルします。ただし、プログラムにモジュールが含まれている場合、コンパイラは対応する.modファイルがcalc1/に存在する必要があります。今までは、すべてを再コンパイルしましたが(make clean all)、プログラムが大きくなると時間がかかりすぎます!

私が思いついた解決策は、バイナリ用に特定のフォルダ(bin/)を1つ作成することでした。しかし、これは実行可能なオプションではありません。なぜなら、待ち行列には、安定したバイナリが必要なジョブがあるからです。その間に新しい機能も試しています。

私は、.oファイルに似た.modファイルを何らかの形で扱うソリューションを探しています。それらをobj/に配置します。

+0

...他の誰かがそれを確認する必要がありますので、私はこれらの日、これらのコンパイラを使用することはほとんどないが、フラグがifortpgf90ため-moduleで、私のconfigureスクリプトのいずれかに基づいて-J

を使用しますが、私はドンFortranを知っていない(ハ!)。コンパイラは現在のディレクトリに 'mod'ファイルを作成しますか?彼らは予測可能な名前を持っていますか(例えば 'foo.f90' =>' foo.mod')?コンパイラへの引数で名前を制御できますか? – Beta

+0

右の 'mod'ファイルは現在のディレクトリに作成され、そのファイルに指定された名前が付けられます。 'foo.f90'は' module bar'を含み、ファイルは 'bar.mod'と名付けられます。他のファイルで名前が使われているので、 'main.f90'では' use bar'と書いてあるので、これはコンパイル時には制御できません。 – Jost

答えて

4

(ほとんどの)コンパイラは、モジュールファイルのパスを変更するオプションを指定すると思います。 gfortranで、オプションは(manページから)-Jまたは-Mです:

-Jdir 
-Mdir 
     This option specifies where to put .mod files for compiled modules. It is also 
     added to the list of directories to searched by an "USE" statement. 

     The default is the current directory. 

     -M is deprecated to avoid conflicts with existing GCC options. 

私はほとんどのコンパイラは、ディレクトリに.modファイルを探しとして-I

EDIT

に含まれていることを考えますgfortran 4.6の-Mはサポートされなくなりました。私が作る知っている

+0

が確認されました。 'ifort'の' -module'です。ご協力いただきありがとうございます! – Jost

+0

問題ありません。助けてうれしい。 – mgilson

関連する問題