並行程序編輯軟件配置依據及編譯方法簡述

    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文件。


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