我正在尝试修改我的 Makefile 以便我可以输入任何一个
“制作 gnu”或“制作英特尔”
它会编译一切,唯一的区别是
FC = gfortran-4.8 或 ifort, 和 FFLAGS = gfortran 或 ifort 的适当标志。
有人可以帮我解决目前的问题吗?
SOURCES = a1.f a2.f a3.f
OBJECTS = $(SOURCES:.f=.o)
TARGET = myexececutable.x
gnu: GNU_FC $(TARGET)
intel: INTEL_FC $(TARGET)
GNU_FC:
FC = gfortran-4.8
FFLAGS = -O3 -mcmodel=medium -shared
INTEL_FC:
FC = ifort
FFLAGS = -O3 -mcmodel medium -shared-intel
$(TARGET): $(OBJECTS)
$(OBJECTS): $(SOURCES)
.f.o:
$(FC) -c $(FFLAGS) $*.f
最佳答案
可能您正在寻找MAKECMDGOALS。
下面我粗略地修改了你的Makefile,请检查下面:-
SOURCES = a1.f a2.f a3.f
OBJECTS = $(SOURCES:.f=.o)
TARGET = myexececutable.x
gnu: GNU_FC $(TARGET)
intel: INTEL_FC $(TARGET)
ifeq ($(MAKECMDGOALS),gnu)
GNU_FC:
FC = gfortran-4.8
FFLAGS = -O3 -mcmodel=medium -shared
endif
ifeq ($(MAKECMDGOALS),intel)
INTEL_FC:
FC = ifort
FFLAGS = -O3 -mcmodel medium -shared-intel
endif
$(TARGET): $(OBJECTS)
$(OBJECTS): $(SOURCES)
.f.o:
$(FC) -c $(FFLAGS) $*.f
更多信息可以在这里获取
https://www.gnu.org/software/make/manual/html_node/Goals.html][1]
关于linux makefile 帮助声明基于 make gnu 或 make linux 规则的 FC FFLAGS 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447373/