zoukankan      html  css  js  c++  java
  • makefile 学习(一)

    1. 使用 makefile 的原因

    假如每次都手动输入, 可能会写出这样的编译命令

    gcc -c main.c
    
    gcc -c mytool1.c
    
    gcc -c mytool2.c
    
    gcc -o main main.o mytool1.o mytool2.o
    

    那么, 可不可以将这个命令写成 shell 脚本呢, 这样就不需要费事打命令了

    但是, 使用脚本有一个弊端, 假设只有一个源文件被修改, 那么 shell 命令会把整个项目重新编译一遍

    所以, 为了简化编译同时兼顾高效, make 命令应运而生, 但用 make 需要先编写 makefile 文件, makefile 告诉 make 编译规则

    2. makefile 编写规则

    makefile 注释以 # 开头

    规则

    target: componet // 第一行, 依赖关系

    TAB rules // 第二行, 规则

    一个 makefile 例子

    #此行为注释
    main: main.o mytool1.o mytool2.o
    gcc -o main main.o mytool1.o mytool2.o
    main.o: main.c mytool1.h mytool2.h
    gcc -c main.c
    mytool1.o: mytool1.c mytool1.h
    gcc -c mytool1.c
    mytool2.o: mytool2.c mytool2.h
    gcc -c mytool2.c
    

    3. makefile 文件的简化

    三个常用变量

    $@ 目标文件

    $^ 所有依赖对象

    $< 第一个依赖文件

    有这三个变量, 上面的 makefile 可以简化为

    #这是简化后的Makefile
    main: main.o mytool1.o mytool2.o
    gcc -o $@ $^
    main.o: main.c mytool1.h mytool2.h
    gcc -c $<
    mytool1.o: mytool1.c mytool1.h
    gcc -c $<
    mytool2.o: mytool2.c mytool2.h
    gcc -c $<
    

    ..c.o: makefile 的缺省规则, 这个规则表示所有的 .o 文件都依赖于响应的 .c 文件

    这样, makefile 又可以简化为

    #这是再一次简化后的Makefile
    main: main.o mytool1.o mytool2.o
    gcc -o $@ $^
    ..c.o:
    gcc -c $<
    

    4. linux 下, makefile 编写带 boost 程序

    Reference 

    [1] http://blog.csdn.net/livelylittlefish/article/details/3854220

    [2] 

  • 相关阅读:
    shell脚本通过ping命令来获取平均延时
    源码大招:不服来战!撸这些完整项目,你不牛逼都难!
    最新最全的 Android 开源项目合集
    3.环境搭建-Hadoop(CDH)集群搭建
    mycat安装和测试
    LVS+keepalived
    Linux上利用NFS实现远程挂载
    CentOS下MySQL主从同步配置
    Nginx配置文件(nginx.conf)配置详解
    Storm集群搭建
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3698610.html
Copyright © 2011-2022 走看看