zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ABAP接口用法
    监听textarea数值变化
    The first step in solving any problem is recognizing there is one.
    Wrinkles should merely indicate where smiles have been.
    God made relatives.Thank God we can choose our friends.
    Home is where your heart is
    ABAP跳转屏幕
    Python 工具包 werkzeug 初探
    atom通过remote ftp同步本地文件到远程主机的方法
    Mongodb学习笔记一
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/8109509.html
Copyright © 2011-2022 走看看