Makefile gfortran生成文件在mac上不工作
我正试图在我的mac中运行一个带有gfortran的makefile。它在Fedora18中编译没有问题,但我无法使用HPC的最后一个gfortran在MacOS10.8.4中运行。 我是fortran的新手,所以希望能有一些启发。 以下是Make文件: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=
# 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中链接器的选项名称似乎有所改变。