孙文亚的个人博客 bioinformatics learning

gcc 编译


gcc 编译参数

无选项编译链接 gcc source.c 作用:将source.c 预处理、汇编、编译并链接形成可执行文件。默认输出为a.out

选项-o 将source.c 预处理、汇编、编译并链接形成可执行文件test -o用来指定输出文件文件名

-E 将source.c 预处理输出 .i文件

-S 将.i 文件汇编成.s文件

-c 将.s输出为.o文件

gcc .o -o 将输出.o文件链接成最终可执行文件

多文件一起编译 分别编译后链接成可执行文件

makefile对多文件进行编译 rule:target:conponents

对程序进行调试

gdb file

list <显示源代码>

break 行号 <设置断点>

run <运行程序>

continue <继续从断点处执行>

print 变量 <调试时查看变量的值>

del 行号 <删除断点>

step <单步执行,可跟踪到函数内部>

next <单步执行,不可跟踪到函数内部>

quit <退出>

makefile 的编写不是件容易的事情,因为自己写的makefile可能不能在所有的unix/linux类操作系统下通用。因此在很多项目中都用automake.autoconf或者是Cmake等工具。

novobreak程序makefile 例子

CC=gcc #CC:C语言编译程序。默认命令是”cc”。

CFLAGS=-g -W -Wall -O3(最高级优化) -finline-functions(内联function函数) -D_FILE_OFFSET_BITS=64 #CFLAGS:C语言编译器参数 -g debug调试信息

GLIBS=-lm -lbam -lz

INCLUDE=-Isamtools(文件夹)将samtools加入到搜索程序头文件的路径列表中

LIBPATH=-Lsamtools (库路径)将samtools加入到搜索库文件的路径列表中

GENERIC_SRC= string.h vector.h file_reader.h file_reader.c hashset.h list.h dna.h sort.h

all: samtools/libbam.a novoBreak nbasm #all伪目标:如果make后没有跟随文件名,那么将执行该依赖关系。

samtools/libbam.a: #路径 库文件 对bam文件处理函数 (cd samtools; make libbam.a)

novoBreak:#依赖文件 $(GENERIC_SRC) filter_kmer.c sr_aln.h sr_aln.c aln_cigar.h simp_asm.h stdaln.h stdaln.c /编译命令/$(CC) $(CFLAGS) $(INCLUDE) $(LIBPATH) -o $@ #所有的.o 文件 file_reader.c sr_aln.c stdaln.c filter_kmer.c $(GLIBS)

nbasm: file_reader.c asm_R2.c localasm_main.c $(CC) $(CFLAGS) -o $@ $^ -lm(依赖math.h)

clean: rm -f samtools/*.o samtools/libbam.a *.o *.gcda *.gcno *.gcov gmon.out novoBreak nbasm #clean:常用于清理历史文件

clear: rm -f *.o *.gcda *.gcno *.gcov gmon.out #标号标签 make clear/make clean

解释如下: (1)target … : prerequisites … command … target可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。 prerequisites就是,要生成那个target所需要的文件或是目标。 command也就是make需要执行的命令。(任意的shell命令)。注意command之前是TAB键,并非空格键。

(2)$@:表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,”$@”就是匹配于目标中模式定义的集合。

(3)$^:所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

(4)$(CC) $(CFLAGS) $(INCLUDE) $(LIBPATH) -o $@ file_reader.c sr_aln.c stdaln.c filter_kmer.c $(GLIBS)

C语言编译器参数 -o 目标文件集 依赖文件

参考资料:

C编译: makefile基础:

http://www.cnblogs.com/vamei/archive/2013/04/29/3051062.html

怎样写Makefile文件(C语言部分):

http://www.cnblogs.com/wangshuo/archive/2011/04/14/2016236.html

gcc -MM .c 依赖关系


上一篇 linux进程管理

Comments