• 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] 

  • 相关阅读:
    小程序购物车页面样式
    用css让div高度自动撑满屏幕
    客户端封装浏览器
    vuex模块的普通用法
    vue图片预览
    Django中Cookie和Session配置和操作
    jira的插件开发流程实践
    python3.7安装模块MySQLdb报错error: Microsoft Visual C++ 14.0 is required.
    Hadoop2.9下运行JAR包时System.out.println的输出日志
    MapReduce程序——WordCount(Windows_Eclipse + Ubuntu14.04_Hadoop2.9.0)
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3698610.html
Copyright © 2020-2023  润新知