我正在尝试在我的mac中使用gfortran运行makefile。它在Fedora 18中编译没有问题,但是我无法在Mac OS 10.8.4中使用来自HPC的最后一个gfortran。 我是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)
文件较长,但我不知道是否需要了解错误。我在目录上运行make时得到的错误是:
tcapelle$ gnumake
gfortran -o bin/pasos -Wl,-Map=bin/pasos.map obj/pasos.o obj/nodes.o obj/io_list.o obj/rcomm.o obj/tparc.o obj/zcomm.o obj/pcomm.o obj/getoptm.o obj/control.o obj/heap.o obj/gener.o obj/param.o obj/ascii.o obj/mensamod.o obj/optionsm.o obj/debugm.o
ld: unknown option: -Map=bin/pasos.map
collect2: error: ld returned 1 exit status
gnumake: *** [bin/pasos] Error 1
编辑: 我改变了makefile
LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map=$@.map $^
到
LINK=$(LN) $(LFLAGS) -o $@ $^
它会编译一些错误,但它有效。 这是什么-Wl,-Map =事情呢?
答案 0 :(得分:1)
问题是BSD链接器(与GNU链接器相反)不识别选项,如果它们通过等号(而不是空格)与相应的值分开。所以
ld -Map test.map
很好,而
ld -Map=test.map
不是。因此,您必须确保编译器以后一种形式将链接器选项传递给链接器。为此你需要
gfortran -Wl,-Map,test.map ...
您可以通过将LINK
变量的定义更改为:
LINK=$(LN) $(LFLAGS) -o $@ -Wl,-Map,$@.map $^