У вас есть ряд проблем с Makefile, а также вы не можете включить .o
файл при компиляции другого .o
файла. .o
файлы отправляются только в компоновщик, но с использованием флага -c
в ifort указывается, что он создает объект, а не. Кстати, это поможет нам понять ваш вопрос, если вы правильно отформатируете пример: ваши пробелы очень странные, что усложняет чтение.
Я думаю, вы хотите что-то подобное; это создает программу с именем «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 [email protected] $^
%.o: %.c
$(CC) -c $(CFLAGS) -o [email protected] $<
%.o: %.f90
$(FC) -c $(FCFLAGS) -o [email protected] $<
.PHONY : clean
clean:
rm -f *.o
Это выглядит больше, но если/когда необходимо добавить дополнительные исходные файлы все, что вам нужно сделать, это поместить их в переменную SRCS (и объявить любые дополнительные предварительные условия).
Всегда используйте тег [tag: fortran] и добавляйте только версию, когда это необходимо, чтобы отличить ваш вопрос. Например, вы не можете использовать Fortran 2008, но только Fortran 90. –