zoukankan      html  css  js  c++  java
  • Makefile

    Makefile是什么

    一般来说,程序编译需要把源文件编译成中间代码文件,在Windows下是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫做链接(Link)

    Makefile是linx系统下简化编译指令的文件。

    例如:vcs是一个编译verilog文件的软件,编译时需要使用 vcs -full64 test.v -l readme.log指令。

    其中-full64是装的是64位的软件,test.v是测试的verilog代码,-l readme.log是将编译指令写入readme.log文件中。

    如果在该目录下没有Makefile文件,则每次编译都要敲如此长的指令,很不方便。如果使用Makefile,则只 需要输入make vcs 则可以进行编译。

    在工作目录创建Makefile,编辑

    .PHONY:vcs
    
    vcs:
    	vcs -full64 test.v -l readme.log
    

    在终端敲入 make vcs就可以实现vcs -full64 test.v -l readme.log指令。

    Makefile基本语法

    显示规则

    目标文件:依赖文件
    
    ​	指令
    
    
    

    其中目标文件是编译生成的文件,依赖文件是源文件,第二行的指令需要用Tab键

    例如

    edit:main.o
    	cc -o edit main.o
    
    main.o:main.c defs.h
    	cc -c main.c
    	
    claen:
    	rm main.o 
    

    上述第一行是我们希望最后生成的edit执行文件,edit是由object文件生成,object再由源代码生成,clean是删除中间文件object。其中clean使用了一个伪目标,不是为了生成clean,而是单纯执行下面的指令。更为稳健的做法是:

    .PHONY:clean
    clean:
    	rm main.o
    

    通过.PHONY声明clean是一个伪目标,不是一般的规则。

    常用:makefile中也有类似于C语言中宏定义的使用,例如:

    object = main.o kbd.o command.o disply.o
    $(object)
    

    其中$(object) = main.o kbd.o command.o disply.o

    将生成的中间文件保存到另一个文件夹中

    DIR = ./debug
    $(DIR)edit:$(main.o)
    	cc -o $(DIR)edit $(DIR)main.o
    

    其中DIR是保存的路径,在每个文件前都要加上路径。

    常用函数

    搜索文件函数wildcard

    SOURCE = $(wildcard *.c)
    #把当前目录下所有.c文件存入变量SOURCE
    

    字符串替换函数patsubst

    OBJS = $(oatsubst %.c,%.o,$(SOURCE))
    #把SOUCE中.c文件换成.o存入到OBJS中
    

    注意:如果文件不是命名为makefile或者Makefile,则使用时是用指令make -f filename

  • 相关阅读:
    JavaScript没有块级作用域
    JavaScript数据类型
    接口
    Linux用户与组别的操作
    解决 macOS 下 SSH 空闲一段时间后自动断开
    Excel 系列一 之 账户类长数字打开不截断与完全显示
    怎样花两年时间去面试一个人
    北京大学硕士学位论文模板
    Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
    刷 LeetCode 时再学习 Python 中引用
  • 原文地址:https://www.cnblogs.com/kefu/p/14532730.html
Copyright © 2011-2022 走看看