make makefile

简单的makefile文件如下

start: hello.o                                                 //标号:依赖项
[tab键]  gcc -o hello hello.o                             //只会执行这一句除非需要依赖关系才会执行依赖标号的
     @echo "------------------ok----------------"   //@的意思是输出的时候不会输出echo
 hello.o:
[tab键]   gcc -o hello.o -c hello.c
 clean:
[tab键]   rm -rf hello.o

makefile中也可以有变量一般变量都用大写如:VARNAME=some_text

引用变量$(VARNAME)

如:

AA=gcc

start: hello.o                                                 //标号:依赖项
[tab键]  $(AA)-o hello hello.o                             //只会执行这一句除非需要依赖关系才会执行依赖标号的
     @echo "------------------ok----------------"   //@的意思是输出的时候不会输出echo
 hello.o:
[tab键]  $(AA)-o hello.o -c hello.c
 clean:
[tab键]   rm -rf hello.o

以后换编译器就只需要改变AA的值就可以啦。。

再次简化

AA=gcc

SRCS=hello.c

OBJS=hello.o     #还可以这样写:OBJS=$(SRCS:.c=.o)

EXEC=hello

start: $(OBJS)                                                  //标号:依赖项
        $(AA)-o $(EXEC) $(OBJS)                             //只会执行这一句除非需要依赖关系才会执行依赖标号的
     @echo "------------------ok----------------"   //@的意思是输出的时候不会输出echo
$(OBJS)  :
        $(AA)-o $(OBJS) -c $(SRCS)
 clean:
     rm -rf $(OBJS)

////////////////

还有如下:

.SUFFIXES: .c .o        #这是一种规则表示x.c文件与x.o文件关联

SRCS=hello.c
 OBJS=$(SRCS:.c=.o)
 EXES=hello
 CC=gcc

start: $(OBJS)
   $(CC) -o $(EXES) $(OBJS)
   @echo "------------------ok----------------"
 .c.o:                                                                   #关联项
   $(CC) -o [email protected] -c $<                                        #  [email protected] 表示规则对应的目标文件 hello.o  $<  表示规则关联的文件hello.c
 clean:
   rm -rf $(OBJS)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、

/////////////////makefile同时编译多个文件

.SUFFIXES: .c .o        #这是一种规则表示x.c文件与x.o文件关联

SRCS=hello.c\add.c               #在这里同时编译2个文件
 OBJS=$(SRCS:.c=.o)
 EXES=hello
 CC=gcc

start: $(OBJS)
   $(CC) -o $(EXES) $(OBJS)
   @echo "------------------ok----------------"
 .c.o:                                                                   #关联项
   $(CC) -o [email protected] -c $<                                        #自动根据$(OBJS)中.o的数量循环编译,直到编译完所有的.c文件
 clean:
   rm -rf $(OBJS)

时间: 2024-10-16 04:54:24

make makefile的相关文章

关于makefile中变量的多次赋值以及override指令

1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影响这条原则. 1.3 原则3 当使用了override指令定义赋值了变量后,其后对该变量的所有的赋值都是无效的.但是override之前的所有的赋值都是有效的.使用的时候是往前最近原则. 2 override变量.命令行参数和普通变量之间的屏蔽关系 override变量会屏蔽命令行参数,除非用+=:

使用Makefile去管理程序

前言:在gcc中如何使用分屏操作  : 在命令行中使用    : sp + filename     vim  Makefile  编辑make工程   第一行使用 # 进行注释   说明是什么make  内容格式:  目标文件:  依赖文件 ·  ·  ·  但是一定要注意如果要使用编译指令一定要用table键 不能使用几个空格代替 另外  max.h 和min.h 的内容就是函数声明 下面说下这样make的好处吧:  在大型程序中能很好帮我们管理我们的代码和项目,程序的任何部分分工都很明确,

Contiki 2.7 Makefile 文件(三)

2.第二部分 这里的usage,targets,savetarget,savedefines都是伪目标. 和all不同,这些伪目标不会被执行,除非显式指定这些目标. 这里有两个目标savetarget,savedefines前边我们提过. 通过命令 make TARGET=esb savetarget可以保存默认的TARGET到Makefile.target中. 通过命令 make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines 可以保存默

My first makefile to compile multiple C files

I have three files to compile: main.c, func.c,  func.h The steps: 1   main.c   to   main.o 2   func.c    to   func.o 3    link main.o func.o to main(file that can execute) So, u need to run at least three commands without a Makefile.Then if u have 10

liunx中ctags 与makefile的使用

ctags 是vim下可以帮助阅读代码的一个的工具,它可以很方便的看到程序的源代码 使用ctags可以有两种方法:(1).可以在任意目录下建立文件,然后使用 ctags *.c,这个命令的意思是把当前目录下的所有文件生成标签文件(vim可以通过标签,跳转到标签文件处)例如: vim ctag.h vim ctag.c vim main.c 在main.c中把光标移至fun函数处,按Ctrl+[就会跳转到fun函数定义的地方,即ctag.c处,Ctrl+T回转到main.c函数 (2).输入cta

linux中make命令的简单使用以及Makefile文件的书写

Makefile 会不会写makele,从一个侧面说明了一个是否具备完成大型工程的能力. 一个工程中的源件不计数,其按类型.功能.模块分别放在若干个目录中,makele定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makele就像一个Shell脚本一样,其中也可以执行操作系统的命令.makele带来的好处就是"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率. ma

makefile编译文件介绍

通常在C语言程序开发中,尤其是大型项目的构建,我们不可能一个文件一个文件去编译,通常会编写Makefile文件使用make命令完成项目的编译构建: 如下:math项目是简单的计算那个数字大,哪个数字小,以及两个数字和的小程序.由max.c,min.c , sum.c 和main.c构成,分别如下: max.c #include <stdio.h> int max(int a,int b) {     if(a>b){         return a;      }else{      

通用多目录makefile的写法

我的项目文件层次是:项目名称/include.output.src src/admin.stu.tch.common 最外层的Makefile: DEBUG = yMYDEBUG = DEBUGifeq ($(DEBUG),y)DEBFLAGS = -O -g -D$(MYDEBUG)elseDEBFLAGS =endif PRJ_HOME := $(shell pwd)SOURCES := $(wildcard *.c)OBJECTS := ${SOURCES:%.c=%.o}INCPATH

mcstructs使用CMake生成Makefile文件

CMakeLists.txt project(MCSTRUCTS) set(SRC_LIST src/main.c src/mcslist.c src/mcsringbuf.c) add_executable(mcstructs ${SRC_LIST}) 执行过程: [email protected]:~/projects/mcstructs$ cmake . -- Configuring done -- Generating done -- Build files have been writ

makefile实例(2)-多个文件实例

1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * * insert.cpp * * search.cpp * * files.cpp * * * 2, 源文件 因为这里只是想做一下简单测试,所以很多源文件的内容都是空的. [[email protected] 1-makefile]#head *.h ==> buffer.h <== #pragm