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 依赖关系