当C需要特殊类型的makefile时,将Fortran 90与C混合使用?

时间:2012-05-31 11:02:10

标签: c makefile fortran mixing

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

  

如果要将hypervolume函数嵌入到自己的C / C ++代码中,计算超级卷(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。

1 个答案:

答案 0 :(得分: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之类的内容构建库。