最近玩了下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`的核心是规则,每个规则通常由目标(target)、依赖项(dependencies)和命令(commands)组成。...
### makefile实例讲解 #### 为什么学习makefile 在IT行业,尤其是软件开发领域,makefile扮演着举足轻重的角色。它不仅是一种自动化构建工具的配置文件,更是衡量一个开发者能否有效管理与构建大型项目的重要标准...
Makefile实例讲解 Makefile作为一个项目的编译规则文件,在ubuntu系统中扮演着重要的角色。通过学习Makefile,可以掌握项目的编译和链接过程,从而提高编程能力和项目管理能力。 一、Why Makefile? Makefile是...
### Linux下makefile实例讲解 #### 一、Makefile文件介绍与编写方法 **1.1 规则的格式** Makefile的核心在于规则的定义。一个典型的规则包括目标(target)、依赖(dependencies)以及命令(commands)。其基本格式如下...
《深入理解经典makefile实例》 在软件开发中,构建过程是至关重要的,它将源代码编译成可执行程序。在这个过程中,`makefile`起着核心作用,它是自动化构建工具`make`的配置文件,负责定义编译规则、依赖关系以及...
### makefile实例解析:构建嵌入式Linux程序 在深入探讨makefile的实例之前,我们首先需要理解makefile的基本概念及其在软件开发中的作用。makefile是一种用于自动化编译过程的脚本,它通过一系列规则定义了源代码...
makefile的使用实例 主要功能是对两个数求平方根; 包含的文件为: main.cpp makefile my_multi.cpp my_multi.h my_sqrt.cpp my_sqrt.h
在软件开发领域,尤其是Linux平台下,`autotools`是一个强大的工具链,它可以帮助开发者自动化构建复杂的Makefile,使得项目构建过程更加简洁且易于维护。`autotools`包括了多个工具,如`aclocal`、`autoscan`、`...
在编程世界中,`Makefile` 是一个至关重要的工具,特别是在多文件项目中,它用于自动化编译和链接过程,节省了开发者的时间和精力。`Makefile` 的编写是项目构建自动化的核心,它定义了一系列规则,告诉操作系统如何...
该实例包含两个工程,LibMakefile.mk和AppMakefile.mk LibMakefile.mk导入config_lib_file_list.mk目录树,生成一个lib/libdemo.so动态链接库 AppMakefile.mk导入config_app_file_list.mk目录树,生成一个release/...
`Makefile`是这样的一个工具,它定义了项目的构建规则,使得编译、链接等步骤可以自动化进行,极大地提高了开发效率。`automake`和`autoconf`是两个与`Makefile`紧密相关的工具,它们可以帮助开发者创建跨平台、符合...
在Go语言的开发环境中,`Makefile`是一个非常重要的工具,它可以帮助开发者自动化构建、测试和部署项目。本文将深入探讨Go项目的`Makefile`示例及其相关知识点,旨在提高Go开发者的工程化能力。 首先,`Makefile`是...
这个Makefile是一个用于编译C语言程序的简单示例。下面是对Makefile中各个部分的解释: 编译器设置:CC = gcc 指定了使用的编译器是gcc。 编译选项:CFLAGS = -Wall -Wextra -g 定义了编译时使用的选项,包括开启...
【Makefile实例详解】 Makefile是构建自动化工具,用于简化软件构建过程,它定义了一系列规则来决定哪些文件需要被编译或链接,以及如何执行这些操作。在这个实例中,我们将探讨如何创建和优化一个Makefile,使其能...
从`makefile实例讲解.doc`中,你可以找到不同类型的Makefile示例,了解如何定义目标、规则,以及如何使用变量和函数。 6. **高级主题** - `ifeq`和`ifeq`条件语句:用于条件化执行部分Makefile规则。 - `.PHONY`...
本文将围绕"一个makefile标准工程"的主题,结合具体的Audio-Makefile实例,深入探讨Makefile的核心概念、结构以及如何编写和使用Makefile。 一、Makefile基础 Makefile是构建程序的一种规则集合,它定义了目标文件...
在本文中,我们将深入探讨 Conan 的核心概念、工作流程以及如何与 Makefile 结合使用。 1. **Conan 基本概念** - **包**: 在 Conan 中,一个包代表一个库或应用,包含源代码、编译脚本、头文件、库文件等。 - **...
#### 四、Makefile实例分析 以下是一个简单的 Makefile 示例,展示了如何为一个包含 8 个 C 文件和 3 个头文件的工程编写 Makefile: ```makefile # 定义目标 all: program # 定义规则 program: main.o func1.o ...