并行程序编辑软件配置依据及编译方法简述

    1. 如果程序需要运行在以太网,请使用以下编译器及连接器:
    a) GNU C编译器及连接器:/opt/mpich/gnu/mpicc
    b) GNU C++编译器及连接器:/opt/mpich/gnu/mpicxx
    c) GNU Fortran77编译器及连接器:/opt/mpich/gnu/mpif77
    d) Intel C编译器及连接器:/opt/mpich/intel/mpicc
    e) Intel C++编译器及连接器:/opt/mpich/intel/mpicxx
    f) Intel Fortran77编译器及连接器 :/opt/mpich/intel/mpif77
    g) Intel Fortran90 编译器及连接器:/opt/mpich/intel/mpif90
 2. 如果程序需要运行在Myrient网,请使用请使用以下编译器及连接器:
    a) C编译器及连接器:/opt/mpich/myrinet_mx2g/gnu/bin/mpicc
    b) C++编译器及连接器:/opt/mpich/myrinet_mx2g/gnu/bin/mpicxx
    c) Fortran77编译器及连接器:/opt/mpich/myrinet_mx2g/gnu/bin/mpif77

以命令行方式编译并连接代码

  如果程序非常简单,只有一个源文件,那么可以直接以命令行的方式编译并连接代码,下面是一个简单的例子,假设程序只有一个文件helloworld.c。那么可以使用下面命令:/opt/mpich/gnu/bin/mpicc -o helloworld helloworld.c
  其中:
    1. /opt/mpich/gnu/bin/mpicc:编译及连接器,可以选择上节提到的任何一种编译及连接器。
    2. -o:编译输出的可执行文件。
    3. helloworld.c:要编译的文件。
    4. 如果要使用了数学库(math.h),要加上编译选项:-lm。
    5. 针对不同编译器的编译选项请查阅对应编译器的使用手册。

以Makefile方式编译并连接代码

  如果应用程序很复杂,包含多个源代码文件,可以使用Makefile来编译整个程序。Makefile包含了编译程序需要所有信息,并且必须位于源代码文件所在目录。
  编写完makefile后,直接在makefile所在目录下运行make,即开始编译。
  如果运行make clean,将删除所有输出文件。
  但是需要注意的是这些命令会根据makefile描述来执行,所以makefile是否正确非常重要。下面举一个makefile的简单例子,更系统的信息需要您查阅这方面的参考资料。
  假设一个项目包含了9个源文件:MTfile.cpp MTentry.cpp MTnode.cpp MTpredicate.cpp MTobject.cpp MT.cpp MTcursor.cpp Main.cpp BulkLoad.cpp及对应的.h文件,下面这个程序的Makefile文件。

# This is an Makefile for the programs M-TREE
Objects_mtree = MTfile.o MTentry.o MTnode.o MTpredicate.o MTobject.o MT.o MTcursor.o Main.o BulkLoad.o

CC = /opt/mpich/gnu/bin/mpicxx
CLINKER = /opt/mpich/ gnu/bin/mpicxx
CFLAGS = -DUNIX
LINK =

MAKE = make --no-print-directory
SHELL = /bin/sh

### End User configurable options ###

LIBS = ./GiST/libGiST.a
EXECS = mtree

default: mtree

mtree: $(Objects_mtree
$(CLINKER) $(LINK) -o mtree $(Objects_mtree) $(LIBS)

clean:
-rm -f *.o $(EXECS)

.cpp.o
$(CC) $(CFLAGS) -c $<

.SUFFIXES: .cpp

说明:
1. #开头为注释。
2. 第3行中Objects_mtree 的值指定各个cpp文件编译得到的.o文件名称,并用空格隔开。
3. 第5行中CC的值指定了编译器。
4. 第6行中CLINKER的值指定了连接器。
5. 第8行中CFLAGS的值指定了编译器的编译器选项,由用户指定,如果有多个用空格隔开,-DUNIX就是该程序自己的编译选项。
6. 第9行中LINK的值指定了连接器的连接选项,由用户指定,如果有多个用空格隔开。
7. 第11、12行表示采用的make命令和shell环境。
8. 第16行中的LIBS的值指定了程序在连接时需要的额外函数库。
9. 第17行中的EXECS的值指定了程序最后编译连接得到可执行文件。
10. 第19行 “default: mtree”表示默认输出的可执行文件为mtree。因为当需要编译程序时,可以运行make,make命令将去寻找default参数指定的文件名作为默认输出的文件名。
11. 第21行“mtree:….”,说明如何去连接输出mtree这个可执行文件,即运行make mtree时执行的命令。这一行和第22行是固定格式,冒号后面指定需要连接的文件结合,$(Objects_mtree)表示变量Objects_mtree的值,即在第3行指定的.o文件集合。
12. 第22行必须以tab键开头,不能使用空格。
13. 第24、25行“clean:…”,说明当运行make clean时执行的命令,这里是将输出.o文件和可执行文件删除。25行必须以tab键开头。
14. 第27、28行说明如何将.cpp编译成.o文件,28行必须以tab键开头。
15. 最后一行“.SUFFIXES: .cpp”表示该程序的源代码文件是.cpp文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章