linux常用的编译系统
文件类型由文件的扩展名决定
文件类型 | 扩展名 |
---|---|
C源代码 | .c |
Fortran77源代码 | .f |
带预处理的Fortran源代码 | .F |
Fortran90 源代码 | .f90 |
C++源代码 | .c++,.C,.cpp,.cc,.cxx |
汇编代码 | .s,.S |
目标文件 | .o |
库文件 | .a |
共享库文件 | .so |
命令行选项
命令代码 | 实现功能 |
---|---|
-c | 只编译,不链接,即只生成.o文件 |
-o filename | 指定输出文件名,缺省为*.o,a.out等等 |
-Ipath | 指定(增加)包含文件(如*.h)的搜索目录 |
-Lpath | 指定(增加)库文件的搜索目录 |
-lname | 与库文件libname.a(.so)链接 |
-O,-O1,-O2,-O3 | 优化开关 |
-g | 目标码中包含源文件名,行号等信息(用于程序调试) |
运行调试实例
- f77编译文件,优化开关为O2。
f77 -O2 -o prog file1.f file2.c file3.o file4.a
2.编译输出结果
f77 -c file.f
f77-o out file.o
- 增加搜索目录
f77 -c -I/usr/local/mpi/include file.f
f77 -o prog -L/usr/local/mpi/lib file.o -lmpi (等价于:
f77 -o prog file.o /usr/local/mpi/lib/libmpi.a)
实用工具Make
make [-f makefile] [options] [target [target …]]
其中-f选项给出定义规则的文件名(简称makefile文件),缺省使用当前目录下的makefile或者Makefile文件,target指明要求生成的目标(在markfile中定义),当命令行不给出target时,make只生成makefile中定义的第一个目标。比较有用且常用的命令行选项由下面一些
-f文件名:指定markfile文件名
-n:只显示将要执行的命令但并不执行它们。
-p:显示定义的全部规则及宏,用于对markfile的调试。
** 通过makefile文件定义一组文件之间的依赖关系及处理命令方便程序开发过程中的编译与维护。
基本规则
目标:依赖对象
<tab> 处理命令
<tab> …
实例:
prog: file1.f file2.f file3.o
f77 -O2 -o prog file1.f file2.f file3.o
含义:如果目标(prog)不存在,或者存在一个依赖对象(file1.f,file2.f,file3.o)比目标新,则执行指定的命令。