使用Makefile编译多个程序

时间:2013-03-21 04:40:51

标签: shell unix cuda makefile mpi

我必须使用4个不同的cpp文件编译三个单独的程序,并包括一个cuda文件。

文件是:

final_serial.cpp
final_mpi.cpp
final_mpicuda.cpp and final_cuda.cu

final_mpicuda.cpp和final_cuda.cu必须链接在一起。

我当前的Makefile,只是编译前两个文件,serial和mpi,如下所示:

MPIDIR=/usr/lib64/mpich2/
CC=$(MPIDIR)/bin/mpic++
LIBS=-L$(MPIDIR)/lib -lmpl -lopa

all: serial mpi

mpi: final_mpi.cpp
    $(CC) $(LIBS) -o $@ $^

serial: final_serial.cpp
    g++ -o serial final_serial.cpp

我们的想法是,为了将final_mpicuda.cppfinal_cuda.cu连接在一起,我必须执行以下命令:

/usr/local/cuda-5.0/bin/nvcc --compiler-bindir /usr/local/gcc/bin -c final_cuda.cu -o cudacode.o
/usr/lib64/mpich2/bin/mpic++ -lmpl -lopa -c final_mpicuda.cpp -o mpicode.o
/usr/lib64/mpich2/bin/mpic++ -lmpl -lopa mpicode.o cudacode.o -L/usr/local/cuda-5.0/lib64 -lcudart -o cuda

生成名为cuda的可执行文件。所以,我的问题是,如何使用上面提到的Makefile生成一个名为cuda的文件。我不知道如何将这三个命令合并到Makefile中。

由于

1 个答案:

答案 0 :(得分:3)

试试这个:

mpicode.o: final_mpicuda.cpp
    $(CC) -lmpl -lopa -c $< -o $@

cudacode.o: final_cuda.cu
    /usr/local/cuda-5.0/bin/nvcc --compiler-bindir /usr/local/gcc/bin -c $< -o $@

cuda: mpicode.o cudacode.o
    $(CC) -lmpl -lopa $^ -L/usr/local/cuda-5.0/lib64 -lcudart -o $@