0

メジャーを計算するために C ルーチンを必要とする FORTRAN コードがあります。C ルーチンには .c および .h ファイルが含まれており、ドキュメントには次のように書かれています。

ハイパーボリューム関数を独自の C/C++ コードに組み込みたい場合、ハイパーボリュームを計算するためのメイン関数 ( fpli_hv) は、ファイルに含まれていますhv.c。これを独自のコードに追加する簡単な方法は、Makefile.lib を Makefile にインクルードし、.lib に対してリンクすることfpli_hv.aです。エクスポートされた関数は次のとおりです:"

double fpli_hv(double *front, int d, int n, double *ref); 

makefile.lib も次のとおりです。

VARIANT    ?= 4

HV_SRCS    = hv.c
HV_HDRS    = hv.h
HV_OBJS    = $(HV_SRCS:.c=.o)
HV_LIB     = fpli_hv.a

$(HV_LIB): $(HV_OBJS)
    @$(RM) $@
    $(QUIET_AR)$(AR) rcs $@ $^

## Augment CFLAGS for hv.[co] objects
hv.o: CPPFLAGS += -D VARIANT=$(VARIANT)

## Dependencies:
$(HV_OBJS): $(HV_HDRS)  

この C ルーチンを FORTRAN メイクファイルに埋め込むにはどうすればよいですか? おそらく説明的な例を提供することで、私を助けていただけませんか。この問題を検索したところ、いくつかの例が見つかりましたが、すべて makefile の操作を必要としない単純な例を示していました。

4

1 に答える 1

4

Makefile.lib別のものに含めるMakefileと、呼び出される新しいターゲットが 1 つ追加されます (マクロfpli_hv.aも定義されます)。HV_LIBFortran コードのビルドに使用される makefile 内のターゲットの 1 つに依存関係として追加する必要があります。例えば:

オリジナルMakefile、Fortran コードの構築に使用

...

myprog.exe: <list of object files>
    $(FC) -o $@ $^

...

変更は次のように簡単にする必要があります。

...

include Makefile.lib

...

myprog.exe: <list of object files> $(HV_LIB)
    $(FC) -o $@ $^ $(HV_LIB)

...

または、C コードを頻繁に変更して再コンパイルしない場合は、単純にライブラリをビルドしてから、次のようなものを Fortran に追加できますMakefile

...

LIBHV = /path/to/fpli_hv.a

...

myprog.exe: <list of object files>
    $(FC) -o $@ $^ $(LIBHV)

おそらく元のハイパーボリュームMakefileには既にインクルードされているので、ハイパーボリュームのソースコードがあるディレクトリなどでMakefile.libライブラリをビルドできるはずです。make fpli_hv.a

于 2012-05-31T11:57:27.720 に答える