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 文件,“###”是从未执行过的代码行