zoukankan      html  css  js  c++  java
  • make和makefile介绍

    <strong>先附上一个比较简单的,测试代码用的Makefile</strong>
    
    </pre><pre code_snippet_id="463854" snippet_file_name="blog_20140904_3_4948303" name="code" class="cpp">.PHONY: all clean
    
    CC=gcc
    CCFLAGS="-std=gnu99"
    RM=rm
    RMFLAGS=-fr
    
    SRCS=$(wildcard  *.c)
    OBJS=$(patsubst %.c, %.o, $(SRCS))
    EXE=exe
    
    all:$(EXE)
    
    $(EXE):$(OBJS)
            $(CC) $(CCFLAGS) -o $(EXE) $(OBJS)
    
    %.o:%.c
            $(CC) $(CCFLAGS) -o $@ -c $^
    
    clean:
            $(RM) $(RMFLAGS)  $(OBJS) *.out
    





    一、make和makefile

    make:在必要时重新编译所有受改动影响的源文件。

    makefile:告诉make应用程序应该如何构造。

    二、make命令

    1. make选项和参数

    -k: 让make即使发现错误也继续执行,以便于一次性输出所有错误。

    -n:输出要执行的操作,不执行

    -f:设置makefile文件。默认为makefile,如果该文件不存在则查找Makefile。如果使用GNU Make则优先查找GNUmakefile。

    2. 目标

    make命令会创建一个特定的目标,可以将该目标作为make的一个参数。如果没有使用该参数,则make将试图创建makefile文件中的第一个目标。

    3. 依赖关系

    程序目标依赖于.o文件,.o文件依赖于.c和.h文件。

    比如一个程序如下所示


    			/* main.c */
    			#include "a.h"
    
    			/* 2.c */
    			#include "a.h"
    			#include "b.h"
    			
    			/* 3.c */
    			#include "b.h"
    			#include "c.h"

    则依赖关系如下所示:

    			myapp : main.o 2.o 3.o
    			main.o: main.c a.h
    			2.o: 2.c a.h b.h
    			3.o 3.c b.h c.h

    如果程序要一次创建多个文件,如要创建可执行文件和用户手册,则可以使用为目标all

    		all:myapp myapp.help

    三、makefile基础语法

    1. 宏和注释

    注释:make以#开头到行尾表示注释

    宏:宏名 = value 表示定义一个宏。引用方法为 $(宏名)或${宏名}。宏的值可以为空

    2,一个简单的makefile例子

    # makefile中以#开头到行尾表示注释,所以本行是注释
    
    #定义make为目标
    all: myapp
    
    #宏定义编译器为gcc
    CC = gcc
    
    myapp: main.o 2.o 3.o
    #下一行为make规则,用tab键开头(不能用空格替代)
    	CC -o myapp main.c 2.o 3.o
    
    main.o: main.c a.h
    	CC -c main.c
    
    2.o: 2.c a.h b.h
    	CC -c 2.c
    3.o: 3.c b.h c.h
    	gcc -c 3.c

  • 相关阅读:
    我的浏览器和常用扩展
    Win10安装.Net Framework4.7及更高版本
    压缩和解压工具bandizip
    Oracle trunc()函数的用法
    Oracle 中 decode 函数用法
    Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
    String literal is not properly closed by a double-quote eclipse
    linux 启动 Oracle 实例
    查询当前Oracle数据库的实例
    sqlplus 执行 sql 文件
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284684.html
Copyright © 2011-2022 走看看