zoukankan      html  css  js  c++  java
  • Makefile 使用小结

    Makefile 使用小结

    Makefile的基本格式

    #目标:依赖(条件)

    # 命令

     

    #all: add.c sub.c dive.c mul.c main.c 

    # gcc add.c sub.c div.c mul.c main.c -o app

     

     

    app:add.o sub.o dive.o mul.o main.o

    gcc add.o sub.o 

     

    add.o:add.c

    gcc -c add.c gcc -c 只编译,不链接

     

    sub.o:sub.c

    gcc -c sub.o

     

    dive.o:dive.c

    gcc -c dive.c

     

    Makefile 执行的两个阶段:

     

    第一个阶段,自上向下建立关系树

    第二个阶段, 自下向上执行命令

    -------------------------------------------------

    Makefile 项目管理工具

     

    节省项目编译时间

    只编译已经修改的文件

    一次编写 终身受益

     

    程序运行出错的返回值都会保存在$?里面,可以通过

    echo $?来查看

     

     

     

    1.调用make命令来调用Makefile文件,当敲make会自动到当前目录下找Makefile

    2.在Makefile里面#代表注释

    3. 所有命令前面必须有一个TAB空格键

    4. 如果这个目标不依赖任何文件,则在定义目标之后,可以直接跟命令

    clean:

    rm *.o

    rm app

     

    5. make时候如果不带任何参数,则默认会执行第一个目标, 如果想执行clean目标,则需要手动指定clean目标:make clean (如果当前目录下已经存在clean文件,则不再执行clean命令)

     

    解决办法:可以声明一个伪目标

     

    .PHONY:clean

    clean:

    rm -f *.o

    rm -f app

     

    6. 如果想让Makefile 在执行命令出错的时候,不退出,则需要在命令前面加上’’-’’,如:

    • rm add.o

     

    所以完整写法为:

    -rm -f *.o

    -rm -f app

     

    7. 如果不想看到Makefile输出的命令,可以在命令前面加上”@”符号

    test:

    @echo “hello”

     

    8. Makefile中还可以定义变量,当要引用变量时候,可以$(变量名)来引用

    obj=add.o sub.o mul.o dive.o main.o

    app:$(obj)

    gcc $(obj) -o app

     

     

    9. Makefile有内建语法规则,make -P

    $@表示目标, $^表示所有依赖, $<表示依赖中的第一个

     

    #如果遇到后缀名为.o的文件,就依赖于同名的后缀名为.c的文件

    %.o:%.c

    gcc -c $<  -o $@

     

    #wildcard 可以打到当前目录下所有以.c结尾的文件名

    src  = $(wildcard *.c);  

     

    #patsubst 是一个字符串替换函数,意思就是说要把$(src)变量里面所有的以.c结尾的文件替换成.o结尾的文件(注意!只是文件名替换,没有生成.o文件);

    obj = $(patsubst %.c,%.o,$(src));

     

    target = app

    $(target):$(obj)

    gcc $^ -o $@

     

    10. Makefile 常用变量(增加编译时的调试标志)

     

    #预处理器标志(头文件)

    CPPFLAGS= -Iinclude

    # 编译的时候是否需要加调试信息

    CFLAGS= -g -Wall

    # 指定编译时的共享库

    LDFLAGS= -L../lib -lmycalc

    # 指定编译器

    CC=gcc

     

    $(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@

     

    11.

    #彻底清除生成过程文件和生成配置文件

    distclean:

     

    install:

     

    12 make -C 进入指定目录,调用里面的Makefile

    make -C src 

    进入src这个目录,调用src目录里面的Makefile

  • 相关阅读:
    JFinal框架
    shiro认证登录实现
    linux常用的命令
    zookeeper部署到linux操作步骤
    java的冒泡排序
    软件设计的七大原则
    vue知识点整理
    JVM垃圾回收算法
    Sql Server删库了怎么办?跑路是不可能跑路的
    Linux--find用法
  • 原文地址:https://www.cnblogs.com/sinferwu/p/12910930.html
Copyright © 2011-2022 走看看