makefile 订阅
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。 [1-2] 展开全文
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。 [1-2]
信息
应用领域
linux操作系统
外文名
Makefile
类    属
脚本
所属领域
计算机
中文名
Makefile
Makefile定义
Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的编写。所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。 [3]  上述Makefile中的“$@", "$^", "$<" 称为自动变量。 [1] 
收起全文
精华内容
参与话题
问答
  • 在 Linux中写完 makefile make时出现下列的情况 怎么解决呀 试了很多办法 附问题图片和makefile ![图片说明](https://img-ask.csdn.net/upload/201604/17/1460823346_521511.png)![图片说明]...
  • dirs:= multi_code_table/src \ multi_main/src \ multi_msg_find/src \ multi_set_up/src \ multi_user_table/src \ sms_code_set/src \ top/src \ user_table_set/src ...$(foreach 

    dirs:= multi_code_table/src \

    multi_main/src \

    multi_msg_find/src \

    multi_set_up/src \

    multi_user_table/src \

    sms_code_set/src \

    top/src \

    user_table_set/src

    all:

    $(foreach N, $(dirs),make -C $(N);)


    clean:

    $(foreach N, $(dirs),make clean -C $(N);)


    展开全文
  • 今天在学习makefile的时候遇到一个问题,执行命令的时候老师报:make8.mk:11: *** missing separator. Stop.


    今天在学习makefile的时候遇到一个问题,执行命令的时候老师报:make8.mk:11: *** missing separator.  Stop.的错误。

    场景还原:

    Makefile文件名:

    make8.mk

    <span style="font-size:18px;">#this file is just a demo to test the make
    define print_target
    @echo the make target is $(MAKECMDGOALS)
    endef
    .PHONY:values clean makecmd
    values:
    	$(print_target)
    clean:
    	$(print_target)
    	@echo execute the clean target
    
    ifeq($(MAKECMDGOALS),clean)
    print_string=the make target is clean
    else
    print_string=the make target is $(MAKECMDGOALS)
    endif
    makecmd:
    	@echo $(print_string)</span>

    执行命令出现一下情况:

    desktop:~/work$ make -f make8.mk makecmd
    make8.mk:12: *** missing separator.  Stop.
    
    我反复检查变量命名,语法最终才发现了错误地方,原来是ifeq后面缺少一个空格,加上一个空格就ok了。

    ifeq<span style="background-color: rgb(255, 0, 0);"> </span>($(MAKECMDGOALS),clean)
    唉,就这个空格花费了我一个小时的时间。惭愧啊!

    希望自己以后学习的时候细心点,引以为鉴吧!嘿嘿!

    最后的执行结果:

    desktop:~/work$ make -f make8.mk makecmd
    the make target is makecmd




    展开全文
  • makefile

    千次阅读 多人点赞 2019-08-18 21:47:30
    makefile建立 1.最简单的makefile 2.makefile进阶 3.makefile优化 (1)常用的变量名(约定俗成的): (2)一些特殊字符 (3)特殊变量 (4)makefile内置函数 代码 makefile三要素:目标;依赖;命令 makefile执行...

    目录

    makefile建立

    1.最简单的makefile

    2.makefile进阶

    3.makefile优化

    (1)常用的变量名(约定俗成的):

    (2)一些特殊字符

    (3)特殊变量

    (4)makefile内置函数

    代码


    makefile三要素:目标;依赖;命令 

    makefile执行原理:从上到下建立依赖关系;从下到上执行

    makefile建立

    通过实现一个加减乘除方法作为例子,文件结构如图所示

    src中文件如图所示:

    然后编写src中Makefile文件

    1.最简单的makefile

    app:add.c jian.c cheng.c chu.c main.c
        gcc add.c jian.c cheng.c chu.c main.c -I../include -o app

    2.makefile进阶

    app:add.o jian.o cheng.o chu.o main.o
        gcc add.o jian.o cheng.o chu.o main.o -o app
    add.o:add.c
        gcc -c add.c -I../include
    jian.o:jian.c
        gcc -c jian.c -I../include
    cheng.o:cheng.c
        gcc -c cheng.c -I../include
    chu.o:chu.c
        gcc -c chu.c -I../include
    main.o:main.c
        gcc -c main.c -I../include

    3.makefile优化

    (1)常用的变量名(约定俗成的):

    CC:表示c编译器版本

    CFLAGS:表示编译时参数

    CPPFLAGS:表示预处理参数

    CXX:表示C++编译器版本

    CXXFLAGS:表示c++编译时参数

    LDFLAGS:表示库参数库选项

    INCLUDE:表示头文件目录

    TARGET:表示目标名

    RM:删除选项

    (2)一些特殊字符

    $(变量):对变量取值

    @:只显示命令结果,忽略命令本身

    -:如果当前命令出错,忽略错误,继续执行

    %:通配符,通配符是以遍历的方式实现的

    (3)特殊变量

    用于当前目标:

    $@:代表目标

    $<:代表依赖中的第一个

    $^:代表所有依赖

    (4)makefile内置函数

    wildcard:按照指定格式获取当前目录下的所有文件名

    例:SOURCEFILE=$(wildcard *.c):获取.c后缀的所有文件并返回赋值给SOURCEFILE

    patsubst:根据指定的格式进行替换(字符串替换)

    例:DEFFILE=$(patsubst %.c,%.o,$(SOURCEFILE))

    代码

    .PHONY:clean #伪目标
    CC=gcc
    INCLUDE=-I../include
    CFLAGS=-c -g -Wall $(INCLUDE) #-g增加调试信息 -Wall严格编译
    CPPFLAGS=-E -D    #-E头文件展开 -D编译时定义宏
    CXX=g++
    LDFLAGS=-L../lib -lpthread  #这只是个例子,并没用到该库。-l库名
    TARGET=app
    RM=rm -rf
    
    SRCFILE=$(wildcard *.c)
    DEFFILE=$(patsubst %.c,%.o,$(SRCFILE))
    
    $(TARGET):$(DEFFILE)
        $(CC) $^ -o $(TARGET)
    %.o:%.c
        $(CC) $(CFLAGS) $<
    
    clean:
        -$(RM) $(TARGET) $(DEFFILE)
    install:
        sudo cp $(TARGET) /usr/bin
    uninstall:
        sudo $(RM) /usr/bin/$(TARGET)
    

     

    展开全文
  • make makefile

    2013-05-20 09:27:52
    make 的-f参数可以指定makemakefile文件的文件名字 make -f mymakefile make -f mymakefile clean   makefile的总控makefile可以把变量传送到下级的makefile 但不会覆盖下层的变量 想要传递到下层可以使用export...

    make 的-f参数可以指定make的makefile文件的文件名字

    make -f  mymakefile

    make -f mymakefile clean

     

    makefile的总控makefile可以把变量传送到下级的makefile

    但不会覆盖下层的变量

    想要传递到下层可以使用export

    不想传递使用unexport

     

     

     export variable = value

     

           其等价于:

     

           variable = value

           export variable

    需要注意的是,有两个变量,一个是SHELL,一个是MAKEFLAGS,这两个变量不管你是否export,其总是要传递到下层Makefile中,特别是MAKEFILES变量,其中包含了make的参数信息,如果我们执行总控Makefile”时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFILES变量将会是这些参数,并会传递到下层Makefile中,这是一个系统级的环境变量。

     

    展开全文
  • make Makefile

    千次阅读 2005-01-10 21:34:00
    make 来开发和编译程式的确很方便,可是要写出一个 Makefile就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几百页的文件,光看完 Overview 就快阵亡了,难怪许多人闻 Unix 色变。本文将介绍...
  • make clean:仅仅是清除之前编译的可执行文件及配置文件。 make distclean:要清除所有生成的文件。
  • Makefilemake工具

    千次阅读 2010-12-02 13:26:00
    make工具相当于一个Shell,通过解释Makefile的中的命令进行工作。大多数IDE都有这个工具,比如:Visual C++的nmake,Linux下GNU的make。   make工具最主要也是最基本的功能就是通过makefile文件来描述源...
  • makefile/make用法

    千次阅读 2012-11-30 12:36:21
    为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂 。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML的标识的含义。特别在Unix下的软件...
  • Makefilemake参数

    千次阅读 2018-06-23 21:38:14
    任何在makefile中的目标都可以被指定成终极目标,但是除了以“-”打头,或是包含了“=”的目标,因为有这些字符的目标,会被解析成命令行参数或是变量。 “-B”“--always-make”认为所有的目标都需要更新(重编译...
  • Makefilemake 的运行

    千次阅读 2014-06-05 19:51:13
    一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同...
  • makefile不是makelove

    2008-08-06 22:36:00
    原来一听makelove很来劲,但听到makefile就不知道是啥了。最近除了公司的活,还在做开源项目skyeye,设备的模拟还在研究,等将整个架构熟悉后会总结一下的。 来makefile吧,现在原来很多开源项目都用make管理,原来...
  • 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同...
  • makemakefile

    千次阅读 2011-02-23 14:59:00
    一、makeMakefile概述  make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有该命令,比如VC++中的nmake,linux下GNU的make,Delphi中的make.简而言之,make命令执行时,...
  • make and makefile

    2012-02-14 14:55:32
    make and makefile  make and makefile  分析和构建大型工程必备的知识,分析大型工程的入口点,构建大型工程的工具  make是一个解释makefile中指令的命令工具,通过makefile能够实现自动化编译  ...
  • makemakefile

    2008-11-24 16:42:00
    makefile文件主要包含了五部分内容:显示规则,隐式规则,变量定义...由于make有自动推导的功能,所以隐式的规则可以比较简略书写makefile文件,这是有make所支持的。变量定义。在makefile文件中要定义一系列的变量,变
  • 之前做嵌入式Linux时,就一直在用make,但是对Makefile的理解一直都处于表面,看一些大型的代码工程的Makefile,也基本上只能看懂一点,索性,就来深入学习一下Makefile。 1、什么是make?为什么需要makemake...
  • ant调用make实现Makefile编译

    千次阅读 2016-01-01 13:05:29
    上一篇博文《cmake:shell(bat,sh) 脚本方式生成Makefile》中完成了cmake生成Makefile脚本的过程,也就是步骤1,本文谈谈步骤2和步骤3的实现:步骤2:为了让ant能执行make,还得用脚本实现linux sh脚本实现,build.sh:#...
  • Makefilemake工具使用总结

    千次阅读 2019-03-24 22:03:02
    make工具相当于一个Shell,通过解释Makefile的中的命令进行工作。大多数IDE都有这个工具,比如:Visual C++的nmake,Linux下GNU的make。 尤其在Linux和Unix系统开发中,make就带来很多便捷。实际上make工具最主...
  • 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在...
  • makefile报错 : make: No rule to make target

    万次阅读 2018-05-30 10:50:52
    makefile 编译错误 — make: No rule to make target 最近使用make编译一个mount源码,结果出现标题所示完整错误类似为: make: * No rule to make target /xxx/xxx/xxxx/xxxxx/xxx.cpp(or .h )', neede d byxxx_...
  • gcc make makefile 用法

    千次阅读 2018-01-18 22:39:01
    一 .gcc 编译指令: gcc t.c -o t生产t可执行文件 此编译过程是分为四个阶段进行的: 1.预处理(也称预编译,Preprocessing) (1).作用:展开#后的所有头文件。 (2).格式: gcc -E t.c -o t.i 或 gcc -E t.c...
  • Linux makefilemake命令详细介绍

    千次阅读 2016-06-13 17:40:19
    概述 ...或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编
  • 本文分析了内核makefile uImage的生成过程,便于从总体上理解内核makefile。 1.uImage 2.driver/built-in.o 通过分析driver/built-in.o的生成过程,来了解built-in.o和lib.a是如何编译的. ...
  • 用于Makefilemake命令参数介绍

    千次阅读 2013-04-01 11:17:33
    用于Makefilemake命令参数介绍 “-b” “-m” 这两个参数的作用是忽略和其它版本make的兼容性。 “-B” “--always-make” 认为所有的目标都需要更新(重编译)。 “-C ” “--directory=”...
  • Ubuntu——Makefile文件与make命令

    万次阅读 2018-07-18 15:09:49
    make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译; makefile文件是按照规定格式编写,需说明如何编译各个源文件并连接生成可执行文件,并...
  • make 指定目录 makefile

    千次阅读 2019-02-22 17:58:53
    make -C xxx   
  • make/Makefile verbose

    2019-07-23 10:18:53
    1. Linux for example kernel make V=1 For CMake, usemake VERBOSE=1; for GNU autotoolsmake V=1 This depends on your make program. ...Note: make -s (silent) willsuppress all make log. 2. make ...

空空如也

1 2 3 4 5 ... 20
收藏数 332,443
精华内容 132,977
关键字:

makefile