zoukankan      html  css  js  c++  java
  • make笔记

    Makefile基本格式如下:
    
    target ... : prerequisites ...
        command
        ...
        ...
    其中,
    
    target        - 目标文件, 可以是 Object File, 也可以是可执行文件
    prerequisites - 生成 target 所需要的文件或者目标
    command       - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头
    Makefile 中书写shell命令时可以加2种前缀 @ 和 -, 或者不用前缀.
    
    3种格式的shell命令区别如下:
    
    不用前缀 :: 输出执行的命令以及命令执行的结果, 出错的话停止执行
    前缀 @   :: 只输出命令执行的结果, 出错的话停止执行
    前缀 -   :: 命令执行有错的话, 忽略错误, 继续执行
    Makefile的退出码有以下3种:
    
    0 :: 表示成功执行
    1 :: 表示make命令出现了错误
    2 :: 使用了 "-q" 选项, 并且make使得一些目标不需要更新
    编译C时,<n>.o 的目标会自动推导为 <n>.c
    
    # Makefile 中
    main : main.o
        gcc -o main main.o
    
    #会自动变为:
    main : main.o
        gcc -o main main.o
    
    main.o: main.c    <-- main.o 这个目标是隐含生成的
        gcc -c main.c
    Makefile 中很多时候通过自动变量来简化书写, 各个自动变量的含义如下:
    
    自动变量
    
    含义
    
    $@    目标集合
    $%    当目标是函数库文件时, 表示其中的目标文件名
    $<    第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标
    $?    比目标新的依赖目标的集合
    $^    所有依赖目标的集合, 会去除重复的依赖目标
    $+    所有依赖目标的集合, 不会去除重复的依赖目标
    $*    这个是GNU make特有的, 其它的make不一定支持
    变量名
    
    含义
    
    RM    rm -f
    AR    ar
    CC    cc
    CXX    g++
    
    ARFLAGS    AR命令的参数
    CFLAGS    C语言编译器的参数
    CXXFLAGS    C++语言编译器的参数
    伪目标
    
    含义
    
    all    所有目标的目标,其功能一般是编译所有的目标
    clean    删除所有被make创建的文件
    install    安装已编译好的程序,其实就是把目标可执行文件拷贝到指定的目录中去
    print    列出改变过的源文件
    tar    把源程序打包备份. 也就是一个tar文件
    dist    创建一个压缩文件, 一般是把tar文件压成Z文件. 或是gz文件
    TAGS    更新所有的目标, 以备完整地重编译使用
    check 或 test    一般用来测试makefile的流程
  • 相关阅读:
    Struts2拦截器defaultStack与paramsPrepareParamsStack
    Java中的数据类型BigDecimal
    JfreeChart报表数据点显示、链接
    JPA+Hibernate3 CRUD(增删改查操作)
    Ibatis的批量处理iterateiterate标签
    .net中split的用法,asp.net字符分隔
    存储过程中RETURN语句的返回值
    SQL自定义函数学习修改和删除和管理
    SqlCommand 方法
    由于该计算机受到限制本次操作已被取消请与你的系统管理员联系
  • 原文地址:https://www.cnblogs.com/kuang17/p/7680573.html
Copyright © 2011-2022 走看看