2012-01-10 284 views
3

我有一個Makefile用於在mac os x上構建可執行文件,使用mpicc編譯器鏈接mkl_lapack.h庫。 現在這個Makefile是完美的工作,唯一的問題是,我不知道要添加什麼,如果我想編譯Eigenvalues.c鏈接其他.c文件,如果我想鏈接myfile.c我必須在哪裏寫它在Makefile中?如何在Makefile中添加額外的源文件

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 [email protected] $^ $(LFLAGS) 

%.o: %.c 
    @echo C compiling [email protected] 
    $(CC) -c $(CFLAGS) -o [email protected] $< 

clean: 
    rm -rf *.o $(PROGRAMS) 

Eigenvalues: Eigenvalues.c 
+0

LFLAGS傳統上是傳遞給lex的標誌的名稱,而LDFLAGS是傳遞給鏈接器的標誌的名稱。請參閱:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html – 2012-01-12 17:11:15

回答

4

只要有Eigenvalues目標取決於所有.o文件(.c文件,因爲你!)組成的應用程序。按照慣例,這些對象的列表被放在一個變量:

PROGRAMS = Eigenvalues 
Eigenvalues_OBJS = Eigenvalues.o foo.o bar.o #etc 

all: $(PROGRAMS) 

Eigenvalues: $(Eigenvalues_OBJS) 
     $(CC) $(CFLAGS) -o [email protected] $^ $(LFLAGS) 

# delete the "Eigenvalues: Eigenvalues.c" line, 
# leave everything else as you have it 

順便說一句,因爲你使用的是標準的變量名$(CC)$(CFLAGS),你可以離開了%.o: %.c規則完全; Make有一個內置的規則來執行相同的操作。

+0

幾乎標準名稱:-I(眼睛)應該放在CPPFLAGS中,-l(ell)屬於LDFLAGS。 – 2012-01-10 18:57:42

+0

謝謝,它的工作! – 2012-01-10 21:44:36

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 [email protected] $^ $(LFLAGS) 

clean: 
    $(RM) *.o $(OBJS) $(PROGRAMS) 

.c.o : 
    $(CC) -c $(CFLAGS) -o [email protected] $<