(二)Linux下GCC与Makefile

Ubuntu下GCC的使用

gcc的基本使用:(以hello.c为例子)

gcc [options] [filenames]
  • gcc hello.c -o hello
    

    用于确定可执行文件的名称为output_filename,如果不给出这个选项,gcc就会默认给出预设的可执行文件a.out

  • gcc -o hello.c
    

    只是编译,不会链接成可执行文件,只是由.c文件生成.o的目标文件。

  • gcc -g hello.c 	/*output:a.out*/
    gcc -g hello.c -o hello /*output:hello*/
    

    产生调试工具所必需的符号信息,要调试,就必须加上这个选项

  • -O -O2
    gcc test.c -o test_o /*这是没有优化时的执行文件*/
    gcc -O test.c -o test_O /*这是优化时的执行文件*/
    测试的时候用指令:time ./可执行文件名
    

    对程序进行优化,这样产生的可执行文件执行效率可以提高。

    (二)Linux下GCC与Makefile_第1张图片

  • -I{dirname}
    gcc -I/opt/workspace/class/hello hello.c -o hello
    

    增加查询头文件位置,将所指示的目录下查询包含文件。gcc默认的查询头文件在/usr/include/下查找。

    (二)Linux下GCC与Makefile_第2张图片

  • -L{dirname}
    

    将dirname所指向的目录加入带库文件的玛瑙路列表中,在默认情况下,名客人路径为/usr/lib/下查询需要的库文件,这个选项告诉程序先去-L的目录下寻找,然后再去系统路径下查询。

  • -static 静态链接库文件
    gcc -static hello.c -o hello
    

    动态链接需要依赖库,但是静态连接直接将库和程序一起打包了。静态连接一般都很大,慎用!

    (二)Linux下GCC与Makefile_第3张图片

  • -Wall
    gcc -Wall hello.c /*会产生所有的警告信息*/
    相反的,不产生警告信息的是:-w
    
  • -DMACRO
    gcc -DYES hello.c -o hello
    

    (二)Linux下GCC与Makefile_第4张图片

    (二)Linux下GCC与Makefile_第5张图片

Ubuntu下GDB调试工具的使用

  1. 启动GDB

    gdb {可执行文件名}

  2. 打断点

    {break/b} {函数名字、行号、文件名:行号、行号 if条件}

  3. 查看程序

    list、l

  4. 查看所有设置的断点

    info break

  5. 删除断点

    delete 断点标号

  6. 开始运行程序

    run、r

  7. 执行下一步

    next、n

  8. 单步运行程序

    step、s

  9. 继续运行程序

    continue、c

  10. 查看指定变量值

    print、p {变量名}

  11. 运行程序,直到当前程序结束

    finishi

  12. 对指定变量进行监控

    watch 变量名

  13. 退出gdb

    quit、q

Makefile工程管理及make工具的使用

  1. makefile的规则

    target : 依赖对象

    命令

    实例:## hello world makefile ###

    hello:hello.c
    	gcc hello.c -o hello
    

    指定makefile的文件

    make -f {makefile的文件名字}
    make -f Makefile_hello
    <*v*>[makefile==改名字==>Makefile_hello]
    		mv makefile Makefile_hello
    
  2. 伪目标

  3. 变量

    obj=main.o func1.o func2.o func3.o
    hello:$(obj)
    	gcc $(obj) -o hello
    
    变量的方式可以方便后期对依赖关系的修改,默认变量
     $^		代表都有的依赖文件
     $@		代表目标
     $<		代表第一个依赖文件
     
     makefile可以改写成:
     hello:main.o func1.o func2.o
     	gcc $^ -o $@
    
  4. 其他的内容

    • 注释: ##后面的内容视为注释内容

    • @{命令行}:取消回显

      ​ @gcc …………………………

  5. 你可能感兴趣的:(ARM嵌入式)