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] 

  • 相关阅读:
    动态获取页面参数内容
    服务器处理静态文件请求
    最简单的Web服务器
    控制台浏览器代码实战
    4.caffe资源汇总(更新中)
    3. caffe中 python Notebook
    2.caffe初解
    1.caffe初入
    有监督学习和无监督学习
    MySQL 之基础操作及增删改查等
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3698610.html
Copyright © 2011-2022 走看看