2012-01-10 21 views
3

私はmkl_lapack.hライブラリをリンクするmpiccコンパイラを使用して、mac os xで実行可能ファイルをビルドするために使用するMakefileを持っています。 このMakefileは完全に動作していますが、唯一の問題は、myfile.cをリンクする必要がある場合に、他の.cファイルをリンクするEigenvalues.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 –

答えて

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に属します。 –

+0

ありがとう、それは働いた! –

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] $< 
関連する問題