0

我有一个 FORTRAN 代码,它需要一个 C 例程来计算度量。C 例程包括 .c 和 .h 文件,在文档中它是这样写的:

如果你想在自己的C/C++代码中嵌入hypervolume函数,计算hypervolume( fpli_hv)的主要函数在文件中自带hv.c。将它添加到您自己的代码中的一种简单方法是将 Makefile.lib 包含到您的 Makefile 中并链接到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)  

如何在 FORTRAN makefile 中嵌入这个 C 例程?您能否帮助我,也许可以提供一个说明性的例子。我搜索了这个问题并找到了一些示例,但它们都显示了不需要操作 makefile 的简单示例。

4

1 回答 1

4

包括Makefile.lib到另一个Makefile应该添加一个名为的新目标fpli_hv.a(也将定义HV_LIB宏)。您应该将其作为依赖项添加到用于构建 Fortran 代码的 makefile 中的目标之一。例如:

原始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 回答