Makefile gfortran生成文件在mac上不工作

Makefile gfortran生成文件在mac上不工作,makefile,gnu-make,fortran90,gfortran,Makefile,Gnu Make,Fortran90,Gfortran,我正试图在我的mac中运行一个带有gfortran的makefile。它在Fedora18中编译没有问题,但我无法使用HPC的最后一个gfortran在MacOS10.8.4中运行。 我是fortran的新手,所以希望能有一些启发。 以下是Make文件: # Makefile made to work with GNU Make .DEFAULT: BIN=bin OBJ=obj vpath= %$(OBJ)/.o $(OBJ) vpath= %.mod $(OBJ) EXES=

我正试图在我的mac中运行一个带有gfortran的makefile。它在Fedora18中编译没有问题,但我无法使用HPC的最后一个gfortran在MacOS10.8.4中运行。 我是fortran的新手,所以希望能有一些启发。 以下是Make文件:

# Makefile made to work with GNU Make

.DEFAULT:

BIN=bin
OBJ=obj

vpath= %$(OBJ)/.o    $(OBJ)
vpath= %.mod  $(OBJ)

EXES= pasos   \
      pasosng \
      pasosm  \
      trans   \
      cost    \
      lcal    \
      fluj    \
      loc     \
      eval    \
      impas   \
      imptra  \
      mats    \
      imploc  \
      matesp  \
      dimen

FC=gfortran
LN=gfortran

FCFLAGS=$(USER_FCFLAGS) -g3 -B $(OBJ) -J $(OBJ) @fc_options @fc_warnings

LFLAGS=$(USER_LFLAGS)

ifdef SystemRoot
    dotexe=.exe
endif

ifdef F_PROFILE
    FCFLAGS:=$(FCFLAGS) -pg
    LFLAGS:=$(LFLAGS) -pg
endif

ifdef F_TEST
    FCFLAGS:=-O0 -fbounds-check $(FCFLAGS)
else
    FCFLAGS:=-O3 $(FCFLAGS)
endif

COMPILE=$(FC) $(FCFLAGS) -o $@ -c $< 
LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map=$@.map $^

%.o : %.f90
    $(COMPILE)

all: prepare $(EXES)
$(OBJ)/%.o : %.f90
    $(COMPILE)


clean:
    rm -rf $(OBJ) $(BIN)

prepare: $(BIN) $(OBJ)

$(BIN):
    mkdir $(BIN)

$(OBJ):
    mkdir $(OBJ)


pasos: prepare $(BIN)/pasos$(dotexe)
    @echo $@

$(BIN)/pasos$(dotexe) : $(OBJ)/pasos.o \
        $(OBJ)/nodes.o  \
        $(OBJ)/io_list.o  \
        $(OBJ)/rcomm.o  \
        $(OBJ)/tparc.o  \
        $(OBJ)/zcomm.o  \
    $(OBJ)/rcomm.o \
    $(OBJ)/pcomm.o \
        $(OBJ)/getoptm.o  \
        $(OBJ)/control.o  \
        $(OBJ)/heap.o  \
        $(OBJ)/gener.o  \
        $(OBJ)/param.o  \
        $(OBJ)/ascii.o  \
        $(OBJ)/pcomm.o  \
    $(OBJ)/mensamod.o \
    $(OBJ)/optionsm.o \
        $(OBJ)/debugm.o 
    $(LINK)
编辑: 我在makefile中更改了

LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map=$@.map $^

虽然它编译时有一些错误,但它还是有效的。
这个-Wl,-Map=thing做什么?

问题是,如果选项与相应的值之间用等号(而不是空格)分隔,则BSD链接器(与GNU链接器相反)无法识别选项。所以

很好,但是

ld -Map=test.map
事实并非如此。因此,您必须确保编译器以后一种形式将链接器选项传递给链接器。为此你需要

gfortran -Wl,-Map,test.map ...
您可以通过将
链接的定义更改为:

LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map,$@.map $^

问题在于,如果选项与相应值之间用等号(而不是空格)分隔,则BSD链接器(与GNU链接器相反)无法识别选项。所以

很好,但是

ld -Map=test.map
事实并非如此。因此,您必须确保编译器以后一种形式将链接器选项传递给链接器。为此你需要

gfortran -Wl,-Map,test.map ...
您可以通过将
链接的定义更改为:

LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map,$@.map $^

我认为这与如何将参数传递给mac中的编译器和文件夹结构有关。我认为这与如何将参数传递给mac中的编译器和文件夹结构有关。我得到ld:unknown option:-Map是-Map选项是编译器选项吗?不是,它是链接器选项。尝试使用小写字母
-map
,与FreeBSD相比,OSX中链接器的选项名称似乎有所更改。我得到ld:unknown option:-map是-map选项编译器选项吗?不,它是链接器选项。尝试使用小写字母
-map
,与FreeBSD相比,OSX中链接器的选项名称似乎有所改变。