makefile

makefile

makefile 的简单示例

假如有三个源文件program.c、pro1.c、pro2.c,program.c文件包含有自定义的头文件lib.h,要求生成可执行文件program。

 

文件目录结构
文件目录结构

 

    $(opt)=-g -Wall -c
    test: prgogram.o libtest.a
           gcc $< -L. -ltest -o $@
     libtest.a: pro1.o pro2.o
           ar rv $@ $^
     clean: 
           rm -f *.o   
~                      
  出现错误

 

错误提示
错误提示

 

       检查makefile
       拼写错误

 


 
.

 

    仍然错误

 


 

 

    修改关于链接库部分 
    失败

再探错误原因

 $(opt)=-g -Wall -c

这句话很明显是错误的

修正以后,进行测试

 

测试结果
测试结果

 

最终的makefile如下

  1 opt=-g -Wall
  2 test: program.o libtest.a
  3         gcc $^  -L. -ltest $(opt) -o $@:
  4 libtest.a: pro1.o pro2.o
  5         ar rv $@ $^
  6 clean: 
  7         rm -f *.o   

另一个练习题

一个程序包括以下内容。
三个C语言源文件:x.c y.c z.c。
一个头文件defs.h:x.c和y.c都使用了defs.h中的声明。
汇编语言文件:assmb.s
数学运算函数库:/home/mqc/lib/libm.so

作下图:

 

结构依赖图
结构依赖图

 

prog: x.o y.o z.o assmb.o 
    gcc $^ -L/home/mqc/lib/libm.so -lm -o $@
x.o: x.c defs.h
    gcc x.c -c
y.o: y.c defs.h
    gcc y.c -c
abssmb: abssmb.s
    gcc abssmb.s -c

make的基本知识及其变量

基本知识

  1. make //默认生成第一个目标文件
  2. make prog1.o //生成指定
  3. make -f makefile1 //指定读取makefile1
  4. make clean
    注意如果有同名文件 clean 存在,make clean 会出错
    以下为解决方案
    .PHONY:clean //避免因为clean文件出现,而无法执行删除命令
    clean:
    rm *.o
    指定读取makefile文件

关于变量

变量的作用

 使makefile书写简单

变量的定义

变量的引用

  内部变量

    1. $@
    2. $^
    3. $<

  隐式规则

    *.c自动依赖 *.o文件  可以不写出来
原文地址:https://www.cnblogs.com/Howbin/p/10655399.html