我有一个Makefile,用于在mac os x上构建可执行文件,使用mpicc编译器,链接mkl_lapack.h库。 现在这个Makefile完全正常工作,唯一的问题是我不知道要添加什么,如果我想编译Eigenvalues.c链接其他.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
答案 0 :(得分:4)
只需让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有一个内置的规则可以做同样的事情。
答案 1 :(得分:1)
试试这个伴侣!
PROGRAMS = Eigenvalues
MKL_INCLUDE=/opt/intel/mkl/include
MKLROOT=/opt/intel/mkl/lib
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
all: $(PROGRAMS).c
OBJS = \
Eigenvalues.o \
myfile.o\
##############################################################################
.SUFFIXES : .c .o
CC = mpicc
LD = mpicc
RM = rm -rf
$(PROGRAMS).c : $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS)
clean:
$(RM) *.o $(OBJS) $(PROGRAMS)
.c.o :
$(CC) -c $(CFLAGS) -o $@ $<