Previous: Compiling Fortran 77 Files, Up: Fortran 77 Support


7.11.3 CとC++と,Fortran 77の混在

Automakeは現在,Fortran 77とCそして/またはC++が混在しているプログラム と共有ライブラリを作成するため,限定されたサポートを提供してい ます.しかし,(現在は)Automakeによって処理されませんが,他のパッ ケージ1で処理される,Fortran 77と他の言 葉との混在に関連して,多くの問題が発生しています.

Automakeは二つの方法でそれを助けることが可能です.

  1. ソースコードの組み合わせに依存したリンカの自動的な選択.
  2. 適切なFortran 77のイントリンシックとランタイムライブラリにリンクするた めに,自動的に選択されたリンカに渡す適切なリンカフラグ(例えば‘-L’ と‘-l’)の自動的な選択.

    これらの追加されたFortran 77リンカフラグは,Autoconf(Autoconfバージョ ン2.13やそれ以降)の新しいバージョンで供給された, AC_F77_LIBRARY_LDFLAGSというAutoconfマクロでの出力変数 FLIBSで提供されます.See Fortran 77 Compiler Characteristics.

(_PROGRAMS_LTLIBRARIESプライマリで記述されているような) プログラムや共有ライブラリが,Fortran 77と,Cそして/またはC++が混合す るソースコードを含んでいることをAutomakeが検出した場合, AC_F77_LIBRARY_LDFLAGSマクロをconfigure.acで呼び出し, $(FLIBS)が,適切な(プログラムに対する)_LDADDや,(共有ラ イブラリに対する)_LIBADD変数のいずれかで書かれていることを要求 します.$(FLIBS)が適切な_LDADD_LIBADD変数に書か れていることを確かめるのは,Makefile.amを書いている人の責任です.

例えば,以下のMakefile.amを考えます.

     bin_PROGRAMS = foo
     foo_SOURCES  = main.cc foo.f
     foo_LDADD    = libfoo.la $(FLIBS)
     
     pkglib_LTLIBRARIES = libfoo.la
     libfoo_la_SOURCES  = bar.f baz.c zardoz.cc
     libfoo_la_LIBADD   = $(FLIBS)

この状況では,Automakeは,AC_F77_LIBRARY_LDFLAGSconfigure.acで記述されることを強く要求します.また, $(FLIBS)foo_LDADDlibfoo_la_LIBADDで記述されて いない場合も,Automakeは警告を出します.


Footnotes

[1] 例えば, the cfortran package は,これらすべての言語間の問題を扱い,ほとんどすべてのプラットホームの, ほとんどすべてのFortran 77,C,そしてC++コンパイラで動作します.しかし ながら,cfortranはまだフリーソフトウェアではありませんが,次の メジャーリリースでそうなるでしょう.