我有一个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具有执行相同功能的内置规则。

08-04 18:52