`
jyangzi5
  • 浏览: 212342 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

makefile 实例

阅读更多

最近玩了下linux下c编程,觉得makefile对于项目管理有很大的优越性,在此跟大家分享,如有不足之处敬请指正。

 

系统:Red Hat Enterprise Linux 5

编辑工具 vi,vim(更好用,带有关键字高亮功能)

我自己写了个hello world的小例子,一个头文件:sayhello.h,两个源文件:sayhello.c hello.c

 

/*sayhello.h*/

#ifndef SAY_HELLO          //这块的宏只是为了条件编译,防止重复声明
#define SAY_HELLO  

void sayhello ();               //声明sayhello()函数
#endif

 

/*sayhello.c*/        

#include<stdio.h>
#include"sayhello.h"       //包含头文件

void sayhello()                 //sayhello()函数的真正实现
{
printf("Hello World!\n我会时常想洋洋\n");   //向控制台打印 Hello World!
}

 

 

/*hello.c*/

#include"sayhello.h"       //包含头文件
int main ()
{
sayhello();                      //sayhello()函数调用
return 0;

}

 

以上三个文件放于一个目录下,一般情况下,我们是这样做的:

 

切换到文件目录下

。。。。。。

[root@wuzhq hellotest]# ls
hello.c  sayhello.c  sayhello.h 
[root@wuzhq hellotest]# gcc -c sayhello.c    //将sayHello.c编译为目标文件sayhello.o
[root@wuzhq hellotest]# gcc -c hello.c           //将hello.c编译为目标文件hello.o
[root@wuzhq hellotest]# gcc -o hello hello.o sayhello.o     //将sayhello.o hello.o统一连接为可执行文件hello
[root@wuzhq hellotest]# ./hello

Hello World!

我会时常想洋洋

 

当然我们也可以这样来做:

[root@wuzhq hellotest]# ls
hello.c  sayhello.c  sayhello.h 
[root@wuzhq hellotest]# gcc -o hello hello.c sayhello.c       //一步到位,gcc将多个源文件编译为一个可执行文件有它自己内置的规则

 

 

大家试想,如果对于一个较大型的项目,跟多文件,如改动一处,我们是不是还是要一步步的重复敲命令,重复编译,重复连接?有没有跟好的解决办法呢?答案是肯定的,这时就体现出了makefile的优势

 

在源文件所在目录新建makefile,我自己命名为test,文件内容:

hello:hello.o sayhello.o
        gcc -o hello hello.o sayhello.o
hello.o:hello.c sayhello.h
        gcc -c hello.c
sayhello.o:sayhello.c sayhello.h
        gcc -c sayhello.c
[root@wuzhq hellotest]# ls 

hello.c  sayhello.c  sayhello.h  test

[root@wuzhq hellotest]# make -f test
gcc -c hello.c
gcc -c sayhello.c
gcc -o hello hello.o sayhello.o
[root@wuzhq hellotest]# ls
hello  hello.c  hello.o  sayhello.c  sayhello.h  sayhello.o  test

[root@wuzhq hellotest]# ./hello

Hello World!

我会时常想洋洋

 

看出它的优势了吧,每次对已有文件作改动时,改动之后只需执行make -f test就可以得到新的可执行文件hello

在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是: 
target:components 
TAB rule 
第一行表示的是依赖关系。第二行是规则。特别注意规则行一定要以tab键开头,我上次就犯过这样的错误。

关于makefile编写详细的说明可参考http://www.360doc.com/content/10/0904/22/507289_51249378.shtml,我觉得是个不错的材料。

希望对大家有帮助。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    makefile实例

    在这个"makefile实例"中,我们将会探讨`Makefile`的基本结构、常用指令以及如何使用它来管理和构建项目。 `Makefile`的核心是规则,每个规则通常由目标(target)、依赖项(dependencies)和命令(commands)组成。...

    makefile实例讲解

    ### makefile实例讲解 #### 为什么学习makefile 在IT行业,尤其是软件开发领域,makefile扮演着举足轻重的角色。它不仅是一种自动化构建工具的配置文件,更是衡量一个开发者能否有效管理与构建大型项目的重要标准...

    ubuntu 下makefile实例讲解

    Makefile实例讲解 Makefile作为一个项目的编译规则文件,在ubuntu系统中扮演着重要的角色。通过学习Makefile,可以掌握项目的编译和链接过程,从而提高编程能力和项目管理能力。 一、Why Makefile? Makefile是...

    Linux下makefile实例讲解

    ### Linux下makefile实例讲解 #### 一、Makefile文件介绍与编写方法 **1.1 规则的格式** Makefile的核心在于规则的定义。一个典型的规则包括目标(target)、依赖(dependencies)以及命令(commands)。其基本格式如下...

    经典makefile实例

    《深入理解经典makefile实例》 在软件开发中,构建过程是至关重要的,它将源代码编译成可执行程序。在这个过程中,`makefile`起着核心作用,它是自动化构建工具`make`的配置文件,负责定义编译规则、依赖关系以及...

    makefile实例解释

    ### makefile实例解析:构建嵌入式Linux程序 在深入探讨makefile的实例之前,我们首先需要理解makefile的基本概念及其在软件开发中的作用。makefile是一种用于自动化编译过程的脚本,它通过一系列规则定义了源代码...

    linux C++中makefile使用实例

    makefile的使用实例 主要功能是对两个数求平方根; 包含的文件为: main.cpp makefile my_multi.cpp my_multi.h my_sqrt.cpp my_sqrt.h

    autotools建立makefile实例解析

    在软件开发领域,尤其是Linux平台下,`autotools`是一个强大的工具链,它可以帮助开发者自动化构建复杂的Makefile,使得项目构建过程更加简洁且易于维护。`autotools`包括了多个工具,如`aclocal`、`autoscan`、`...

    makefile编写及实例

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

    一个带类似IDE目录树的makefile实例

    该实例包含两个工程,LibMakefile.mk和AppMakefile.mk LibMakefile.mk导入config_lib_file_list.mk目录树,生成一个lib/libdemo.so动态链接库 AppMakefile.mk导入config_app_file_list.mk目录树,生成一个release/...

    autofile生成makefile实例

    `Makefile`是这样的一个工具,它定义了项目的构建规则,使得编译、链接等步骤可以自动化进行,极大地提高了开发效率。`automake`和`autoconf`是两个与`Makefile`紧密相关的工具,它们可以帮助开发者创建跨平台、符合...

    Go-Go项目的Makefile示例

    在Go语言的开发环境中,`Makefile`是一个非常重要的工具,它可以帮助开发者自动化构建、测试和部署项目。本文将深入探讨Go项目的`Makefile`示例及其相关知识点,旨在提高Go开发者的工程化能力。 首先,`Makefile`是...

    一个简单的Makefile实例,它用于管理一个名为demon的工程项目

    这个Makefile是一个用于编译C语言程序的简单示例。下面是对Makefile中各个部分的解释: 编译器设置:CC = gcc 指定了使用的编译器是gcc。 编译选项:CFLAGS = -Wall -Wextra -g 定义了编译时使用的选项,包括开启...

    MakeFile的实例

    【Makefile实例详解】 Makefile是构建自动化工具,用于简化软件构建过程,它定义了一系列规则来决定哪些文件需要被编译或链接,以及如何执行这些操作。在这个实例中,我们将探讨如何创建和优化一个Makefile,使其能...

    Makefile手册大全.rar

    从`makefile实例讲解.doc`中,你可以找到不同类型的Makefile示例,了解如何定义目标、规则,以及如何使用变量和函数。 6. **高级主题** - `ifeq`和`ifeq`条件语句:用于条件化执行部分Makefile规则。 - `.PHONY`...

    一个makefile 标准工程

    本文将围绕"一个makefile标准工程"的主题,结合具体的Audio-Makefile实例,深入探讨Makefile的核心概念、结构以及如何编写和使用Makefile。 一、Makefile基础 Makefile是构建程序的一种规则集合,它定义了目标文件...

    conan 详解 - (makefile)_files.zip

    在本文中,我们将深入探讨 Conan 的核心概念、工作流程以及如何与 Makefile 结合使用。 1. **Conan 基本概念** - **包**: 在 Conan 中,一个包代表一个库或应用,包含源代码、编译脚本、头文件、库文件等。 - **...

    Makefile_中文教程

    #### 四、Makefile实例分析 以下是一个简单的 Makefile 示例,展示了如何为一个包含 8 个 C 文件和 3 个头文件的工程编写 Makefile: ```makefile # 定义目标 all: program # 定义规则 program: main.o func1.o ...

Global site tag (gtag.js) - Google Analytics