我有一个Makefile,可用来使用mpicc编译器在Mac OS X上构建可执行文件,并链接mkl_lapack.h库。
现在,此Makefile可以正常工作了,唯一的问题是,如果我想链接其他.c文件的Eigenvalues.c,我不知道要添加什么,如果我想链接myfile.c,我必须在哪里写它。生成文件?
MKL_INCLUDE=/opt/intel/mkl/include
MKLROOT=/opt/intel/mkl/lib
CC = mpicc
LD = mpicc
IFLAGS = -I$(MKL_INCLUDE)
CFLAGS = -Wall -O2 $(IFLAGS) -std=c99
LFLAGS = $(MKLROOT)/libmkl_intel_lp64.a $(MKLROOT)/libmkl_sequential.a $(MKLROOT)/libmkl_core.a -lpthread -lm
PROGRAMS = Eigenvalues
all: $(PROGRAMS)
Eigenvalues:
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS)
%.o: %.c
@echo C compiling $@
$(CC) -c $(CFLAGS) -o $@ $<
clean:
rm -rf *.o $(PROGRAMS)
Eigenvalues: Eigenvalues.c
最佳答案
只需让Eigenvalues
目标依赖于组成应用程序的所有.o
文件(而不是.c
文件,就像您一样!)。按照惯例,这些对象的列表放在一个变量中:
PROGRAMS = Eigenvalues
Eigenvalues_OBJS = Eigenvalues.o foo.o bar.o #etc
all: $(PROGRAMS)
Eigenvalues: $(Eigenvalues_OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS)
# delete the "Eigenvalues: Eigenvalues.c" line,
# leave everything else as you have it
顺便说一句,由于您使用的是标准变量名
$(CC)
和$(CFLAGS)
,因此可以完全省略%.o: %.c
规则。 Make具有执行相同功能的内置规则。