`
haiouc
  • 浏览: 118819 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个最简单的Makefile例子(转)

阅读更多
1.hello.c

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

2.Makefile

hello : hello.o
    cc -o hello hello.o
hello.o : hello.c
    cc -c hello.c
clean :
    rm hello.o

说明:cc -o hello hello.o前面是一个tab的空格

3.执行make,产生可执行文件hello

输出如下:
cc -c hello.c
cc -o hello hello.o

4.执行make clean,删除产生的中间文件hello.o

输出如下:
rm hello.o

===============================================
   本来早就应该学Makefile了,只是我偷懒,现在才学呵呵^_^.  makefile的好处叫我说,老实说我也说不出什么之所以然来,但是可以肯定的是它是linux平台的软件工程师都要必备的知识^_^


一、程序的编译及链接

    我们编译程序,无非是想要得到一个可执行文件,而这个过程则是经过这两步:

***.c->编译->***.o->链接->可执行文件。即.c经过编译得到.o文件,.o文件是一个中间文件,再对这些中间文件进行链接最终可得到可执行文件。


二、Makefile的规则

首先,来看一看Makefile的书写规则:

target ... : prerequisites ...
            command
            ...
            ...

    target也就是一个目标文件,可以是.o文件,也可以是执行文件,还可以是一个标签(Label)。

    prerequisites就是,要生成那个target所需要的文件或是目标。

    command也就是make需要执行的命令(任意的Shell命令)。这里要注意的是在命令前面要加上一个tab键,不是空格,是按一个tab键按出来的空格。

     这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比 target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则,也就是Makefile中最核心的内容。这是Makefile的主线和核心,但要写好一个Makefile还得继续努力。


三、一个最简单的Makefile例子

如有一个工程,含有3个头文件及四个c文件,那为了生成所需的可执行文件,这时的Makefile可以这样写:

test:main.o t1.o t2.o t3.o
     gcc –o test main.o t1.o t2.o t3.o
main.o:main.c
     gcc –c main.c
t1.o:t1.c t1.h
     gcc –c t1.c
t2.o:t2.c t2.h
     gcc –c t2.c
t3.o:t3.c t3.h
     gcc –c t3.c
clean:
     rm test main.o t1.o t2.o t3.o

到这里一个最简单的makefile就写好了,把它的名字保存为Makefile就可以了,这时你只要在终端敲一下make,它就自动帮你编译链接了^_^  如果敲入make clean,它将删掉那些中间文件及可执行文件。


分享到:
评论

相关推荐

    Makefile手册_中文版.pdf

    Makefile是Linux系统下的一种构建工具,它定义了程序编译和链接的所有规则,使得开发人员能够通过一个简单的命令make来自动构建可执行程序。Makefile手册为读者提供了全面的Makefile使用指南,介绍其语法、编写规则...

    Makefile最简化版本

    在"testmake"这个例子中,我们可能有一个简单的Makefile,比如: ```makefile all: program program: main.o func.o gcc -o program main.o func.o main.o: main.c gcc -c main.c func.o: func.c gcc -c func...

    makefile经典扫盲贴

    例如,一个简单的C程序编译Makefile可能如下: ```makefile all: main main: main.c gcc -o main main.c ``` 这里,`all`是默认目标,`main`是实际的可执行文件,`main.c`是依赖文件。当`main.c`发生改变时,`gcc...

    Makefile语法格式

    # 一个简单的Makefile例子 test: prog.o code.o gcc -o test prog.o code.o prog.o: prog.c prog.h code.h gcc -c prog.c -o prog.o code.o: code.c code.h gcc -c code.c -o code.o clean: rm -f *.o ``` #...

    手动建立makefile简单实例解析

    在提供的示例代码中,我们有一个简单的C语言项目结构,包括`main.c`、`mytool1.c`、`mytool1.h`、`mytool2.c`、`mytool2.h`等文件,以及一个名为`Makefile`的构建脚本。下面将逐一分析这些文件,并解释它们是如何...

    Makefile 使用手册

    在Makefile使用手册中首先会介绍Makefile文件的结构,包括规则的格式、一个简单的Makefile文件示例、make处理Makefile文件的过程、使用变量简化Makefile文件的方式等。规则的格式是Makefile中最核心的部分,它定义了...

    自己写的Makefile测试程序, 学习Makefile重要代码

    例如,一个简单的Makefile可能如下所示: ```makefile # 这是一个注释 EXECUTABLE = my_program CC = gcc CFLAGS = -Wall # 主要目标,依赖于源文件 $(EXECUTABLE): main.c func.c $(CC) $(CFLAGS) -o $@ $^ # ...

    makefile编写及实例

    在编程世界中,`Makefile` 是一个至关重要的工具,特别是在多文件项目中,它用于自动化编译和链接过程,节省了开发者的时间和精力。`Makefile` 的编写是项目构建自动化的核心,它定义了一系列规则,告诉操作系统如何...

    makefile语法,makefile语法makefile语法

    下面给出一个简单的 Makefile 示例: ```makefile CC=gcc CFLAGS=-Wall all: hello hello: hello.o $(CC) -o $@ $^ $(CFLAGS) hello.o: hello.c hello.h $(CC) -c hello.c $(CFLAGS) clean: rm -f *.o hello...

    内核态makefile指南

    一个基本的makefile例子如下: ``` obj-m += hello.o all: make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean ``` ...

    makefile详解

    为了更好地理解makefile的编写方式,我们可以通过一个具体的例子来进行说明。 假设有一个包含8个C源文件和3个头文件的工程项目。我们的目标是: - 如果项目从未被编译过,则需要编译所有C文件并链接成最终的可执行...

    跟我一起写makefile

    例如,一个简单的Makefile示例: ```make target: dependency command ``` **3. 变量** Makefile支持变量的定义和使用,这使得Makefile更加灵活和强大。常见的变量包括`CC`(编译器)、`CFLAGS`(编译选项)等。...

    跟我一起学写Makefile

    一个简单的Makefile例子可能如下: ```makefile CC = gcc CFLAGS = -Wall OBJS = main.o func1.o func2.o all: my_program my_program: $(OBJS) $(CC) $(CFLAGS) -o my_program $(OBJS) %.o: %.c $(CC) $...

    makefile 从零开始

    例如,一个简单的makefile可能如下所示: ```makefile all: program program: main.o utils.o gcc -o program main.o utils.o main.o: main.c gcc -c main.c utils.o: utils.c gcc -c utils.c ``` 在这个...

    linux Makefile 教程

    Makefile 可以被视为一个脚本,其中定义了一系列规则和命令,用于自动化构建过程。通过简单的 `make` 命令,开发者可以自动完成项目的编译、链接等工作,极大提升了开发效率。 **2. 为什么需要 Makefile?** - **...

    makefile.zip

    例如,一个简单的Makefile可能包含以下内容: ```makefile all: main.o utils.o gcc -o main main.o utils.o main.o: main.c gcc -c main.c utils.o: utils.c gcc -c utils.c ``` 在这个例子中,`all`是默认...

    Makefile手册中文版

    - **简单示例**:Makefile 的一个最基本形式通常包含目标文件、依赖项以及命令行。 #### 二、Makefile规则详解 - **规则格式**:Makefile 规则由目标(Target)、依赖项(Prerequisites)和命令(Commands)三部分...

    如何写makefile

    编写一个简单的`Makefile`示例: ```makefile CC = gcc CFLAGS = -Wall OBJS = file1.o file2.o file3.o all: program program: $(OBJS) $(CC) $(CFLAGS) -o program $(OBJS) %.o: %.c $(CC) $(CFLAGS) -c $$...

    makefile详解.pdf

    假设我们有一个简单的工程,包含两个源文件`main.c`和`util.c`,以及一个头文件`util.h`。我们的目标是生成可执行文件`myprogram`。 以下是一个基本的makefile示例: ```makefile CC=gcc CFLAGS=-Wall -g all: my...

Global site tag (gtag.js) - Google Analytics