MRI.COM

コンパイル

MXEライブラリを用いたプログラムのコンパイルには、以下のようなMakefileを作成して下さい。

Makefile

Makefileに以下の内容を加えます。

  1. 変数LIB_DIRにディレクトリlibの相対パスを入れる
  2. lib/libmxe.makeをinclude
  3. コンパイル時の必須項目に変数$(LIBMXE)を加える
  4. コンパイル・オプションとして変数$(INCLUDES)を加える
  5. 結合時オプションとして変数$(LDFLAGS)を加える

test.F90をコンパイルする場合のMakefileは以下のようになります。1)

### Target objects ###
targets := test
 
### Phony targets ###
all: $(targets)
clean:
	rm *.o core $(targets) *~ *.ctl 2> /dev/null
 
### Platform dependent settings ###
include ../../setting/macros.make
 
### MXE library ###
LIB_DIR := ../../lib
include ../../lib/libmxe.make
 
### Compile ###
%.o: %.F90 $(LIBMXE)
	$(F90) -c $(FFLAGS) $(INCLUDES) -o $@ $<
 
### Link ###
%: %.o
	$(F90) $^ $(LDFLAGS) -o $@

簡単に説明すると、まずコンパイル時にライブラリ$(LIBMXE)(=libmxe.a)が作成されているかどうかを$(LIB_DIR)(=lib/)でチェックして(libmxe.make内のvpath)、なければ$(LIB_DIR)でmakeを実行します。 ただし、プログラムのコンパイルと結合のコマンドでは、$(LIBMXE)を結合の対象には加えず、$(INCLUDES)と$(LDFLAGS)でライブラリとして参照します。 詳細はlib/libmxe.makeの中身を見て下さい。

ライブラリ自体のコンパイルはlib/Makefileで行います。モジュール間の依存関係を満たすように順番にコンパイルしています(objs_libmxeの順番に注意)。

1)
実際のソースはMXEのanl/test_libを参照。ローカルなモジュールも併用する場合にはanl/integ/Makefileなどが参考になると思います。