这是我第一次制作一个make文件。我有点困惑,因为我的Fortran代码使用了C源文件中定义的一些函数。这是我到目前为止所写的:
CC = icc
FC = ifort
FCFLAGS = -O3 -xHost -fno-alias$(INCLUDES)
CFLAGS = -O3 -xHost -fno-alias$(INCLUDES)
LIBS =
INCLUDES =
TARGET = run
OBJS: pi.o\
timing.o
timing.o: timing.c timing.h
$(CC) -c $(CFLAGS) timing.c
pi.o: pi.f90 timing.c timing.h
$(FC) -c $(FCFLAGS) timing.o pi.f90
.PHONY : clean
clean: rm -f *.o
我是在正确的轨道上吗?
答案 0 :(得分:2)
你的makefile有很多问题,而且在编译不同的.o
文件时你不能包含.o
文件。 .o
文件仅发送到链接器,但使用ifort的-c
标志告诉它创建一个对象而不链接它。顺便说一下,如果你正确地格式化这个例子,它将帮助我们理解你的问题:你的空白非常奇怪,难以阅读。
我想你想要这样的东西;这构建了一个名为“run”的程序。
CC = icc
FC = ifort
FCFLAGS = -O3 -xHost -fno-alias $(INCLUDES)
CFLAGS = -O3 -xHost -fno-alias $(INCLUDES)
LIBS =
INCLUDES =
TARGET = run
OBJS = pi.o timing.o
$(TARGET) : $(OBJS)
$(FC) -o $(TARGET) $(OBJS)
timing.o: timing.c timing.h
$(CC) -c $(CFLAGS) timing.c
pi.o: pi.f90
$(FC) -c $(FCFLAGS) pi.f90
.PHONY : clean
clean:
rm -f *.o
或者,如果您想使用一些更精彩的制作功能并避免输入,您可以使用:
CC = icc
FC = ifort
FCFLAGS = -O3 -xHost -fno-alias $(INCLUDES)
CFLAGS = -O3 -xHost -fno-alias $(INCLUDES)
LIBS =
INCLUDES =
TARGET = run
SRCS = pi.f90 timing.c
timing.o: timing.h
OBJS = $(addsuffix .o,$(basename $(SRCS))
$(TARGET) : $(OBJS)
$(FC) -o $@ $^
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
%.o: %.f90
$(FC) -c $(FCFLAGS) -o $@ $<
.PHONY : clean
clean:
rm -f *.o
这看起来更长,但是如果/当您需要添加更多源文件时,您只需将它们放入SRCS变量(并声明任何额外的先决条件)。
答案 1 :(得分:0)
pi.o
需要timing.o
,而不是timing.c timing.h
,在您的fortran食谱中交换两者。应该是这样的:
pi.o: pi.f90 timing.o
$(FC) -c $(FCFLAGS) timing.o pi.f90