GCC编译命令的学习

  • A+
所属分类:linux技术
摘要

1、基本编译命令gcc prog.c -o progprog.c 为gcc的输入命令prog 为输出文件,可执行文件

1、基本编译命令

gcc prog.c -o prog

prog.c 为gcc的输入命令

prog 为输出文件,可执行文件

file prog可查看文件类型

./prog 则执行prog文件

./prog > output 输出信息被定向到 output 文件中

 

 2、多文件编译

如果需要调试,须在gcc后加 -g -Wall -Wshadow

gcc -g -Wall -Wshadow -c prog1.c

gcc -g -Wall -Wshadow -c prog2.c

gcc -g -Wall -Wshadow prog1.o prog2.o -o prog

  --------前两行生成 .o 文件,后面编译

不过上面很麻烦,所以引入make工具

 

3、makefile 文件

我们用vim Makefile创建该文件,文件内容如下:

#后号是注释

GCC = gcc

CFLAGS = -g -Wall -Wshadow

#用标识符代替

gcc -g -Wall -Wshadow #面向用户时 -g 用 -O 代替 大写的O

 

prog: prog1.o prog2.o

  $(GCC) $(CFLAGS) prog1.o prog2.o -o prog

#上面的Tab键不能用空格代替,标识符写入$()中

prog1.o: prog1.c

  $(GCC) $(CFLAGS) -c prog1.c

#用“ : ”表示依赖关系,如果prog1.c更新了,或者没有 prog1.o,此句被执行。

prog2.o: prog2.c

  $(GCC) $(CFLAGS) -c prog2.c

 

testall: test0 test1 test2

test0: prog

  ./prog inputs/input0 > outputs/output0

test1: prog

  ./prog inputs/input1 > outputs/output1

 

test2: prog

 

  ./prog inputs/input2 > outputs/output2

#测试用例

 

clean:

  /bin/rm -f *.o prog ourputs/*

#退出前删除计算机生成的文件

#退出

Linux终端下输入

make

  --------默认Makefile文件会被编译

make test0

  --------测试用例test0

make test1

  -------测试用例test1

make clean

  --------所有的文件都被删除

make -f 文件名

  --------文件名是Makefile格式的文件会被编译

make clean -f 文件名

  --------所有文件被删除,执行文件名里面的clean

 

4、使用valgrind检查内存访问错误

valgrind --tool=memcheck --verbose ./prog

 

5、覆盖测试(有可能有的条件不会被执行,测试文件为coverage.c)

 

gcc -g -Wall -Wshadow -fprofile-arcs -ftest-coverage coverage.c -o cov

./cov

  --------生成coverage.gcda和coverage.gcno两个文件

gcov coverage.c

  --------出现一下提示

    File 'coverage.c'
    Lines executed:71.43% of 7
    Creating 'coverage.c.gcov'

 打开coverage.c.gcov 文件,“###”是从未执行过的代码行