• GCC编译命令的学习


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

  • 相关阅读:
    Hammer.js 实现移动端库事件
    使用两个队列模拟一个栈
    选择排序算法
    插入排序算法
    找出一个整形数组中第二大的数字
    双向冒泡排序算法
    求一个整形数组的最大子数组之和
    循环删除数组中元素的问题
    关于如何输出if()..else里的内容的问题
    小米2017秋招真题——电话号码分身问题(Java版)
  • 原文地址:https://www.cnblogs.com/stacso/p/12586242.html
Copyright © 2020-2023  润新知