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

第一个makefile

阅读更多
最近网上看一本《Linux程序设计入门--网络编程》 学习一下gcc方面的知识
先试验一下makefile 怎么用的吧
/*mytool1.h*/
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
viod mytool1_print(char *print_str);
#endif

/*mytool2*/
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif

/*mytool1.c*/
#include "mytool1.h"
void mytool1_print(char *print_str);
{
    printf("this is mytool1 print %s\n", print_str);
}

/*mytool2.c*/
#include "mytool2.h"
void mytool2_print(char *print_str)
{
    printf("this is mytool2 print %s\n", print_str);
}

/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main(int argc, char **argv)
{
    mytool1_print("hello");
    mytool2_print("hello");
}



这样五个文件 组成一个小的gcc程序,但是要是编译这样一个程序要用到以下命令:


gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o


是比较复杂,没改变一个东西都要这样来一遍,更受不了了。

所以有了makefile ,这样把这样呀多次重复的工作,通过简单的方式来做,这样才能显现出计算机的意义才是。

在同一个文件夹中建立一个makefile的文件,没有 后缀名。
内容为:

main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool2.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c


这样就可以完成任务了,以上的makefile里的行都是成对出现的,第一行列出的是依赖关系,第二行是编译命令。
这样虽然解决了编译麻烦的问题(因为以后编译的时候,一个make指令搞定),但是这样一个makefile文件也够复杂的,呵呵!程序员就是能不复杂就简化它
同样的写就这么几句是不是清爽多了

main: main.o mytool1.o mytool2.o
    gcc -o $@ $^
.c.o
    gcc -c $<


makefile 也就这么简单,以后编译就不再困难。

分享到:
评论

相关推荐

    Linux_Makefile实验.pdf

    后缀规则用于简化类似的构建规则,自动变量如$@代表目标文件,$&lt;代表第一个依赖文件,它们可以在命令中使用,以简化命令行。 知识点八:Makefile的跨平台兼容性 Makefile中的变量和模式规则在设计时会考虑到不同...

    1个小时学会制作Makefile,教你如何制作Makefile

    这里 `%` 符号表示通配符,`$表示依赖文件列表的第一个文件,而 `$@` 表示目标文件。 #### 三、进阶技巧 随着项目规模的增长,Makefile 的编写也会变得更加复杂。下面是一些进阶技巧,可以帮助你更好地管理和维护 ...

    makefile编译多个文件

    `$代表第一个依赖项,也就是当前`.c`文件。 6. `clean`规则用于清理编译产生的临时文件。 当我们运行`make`时,它会根据`Makefile`自动检测文件的更新状态,只重新编译那些需要的文件,提高了开发效率。 在TCP通信...

    Windows 下的 Makefile 编写(一)Makefile的基本规则

    4. **默认目标**:Makefile 默认执行的第一个目标,通常不需要明确指定。如果希望改变默认行为,可以通过 `make` 命令后跟目标名称来实现。 5. **伪目标**:用于标记的特殊目标,例如 `.PHONY` 定义的伪目标。伪...

    Makefile写法

    - 第一行 `gcc -c hello.c -o hello.o` 用于将 `hello.c` 编译成 `.o` 文件。 - 第二行 `gcc hello.o -o hello` 用于将 `.o` 文件链接成可执行文件 `hello`。 - `clean` 目标用于清理生成的文件。 #### 五、...

    Makefile手册中文版

    在第一章“概述”中,介绍了一些准备知识,例如需要了解的基本编译原理,例如编译器、链接器等。此外,还提供了GNU Make的简介。 第二章“GNUmake介绍”具体介绍了Makefile的基础知识,包括Makefile的简要说明、...

    为Graphviz定制的Makefile

    `$代表第一个依赖项(.dot文件),`$@`代表目标(.png文件)。 这个Makefile可能还包含了其他选项,如支持SVG、PDF等不同格式的输出,只需更改`-T`后面的参数即可。此外,可能还有清理(clean)目标,用于删除生成...

    makefile基础与实战编译大型C-C++项目(linux).zip

    1动手编写第一个makefile编译c++多文件项目 2g++分步编译演示从源码到执行程序的四步 3makefile运行流程分析并使用变量改写项目 4makefile自动推导目标代码配置和伪目标clean清理 5使用make编译动态链接库并编写测试...

    makefile v3.8中文手册

    第一章概述了Makefile的概念和准备知识。Makefile是GNU make用来控制软件编译过程的脚本文件,而准备知识可能涉及编译原理和Makefile的基础语法。 第二章介绍GNU make,包括Makefile的简介、规则介绍、简单的示例、...

    跟我一起写Makefile

    #### 第一部分:概述 **Makefile**是一种用于自动化构建过程的脚本文件,在软件开发过程中极为常见。通过编写Makefile,开发者可以定义一系列规则来描述如何编译和链接源代码文件,从而构建出最终的可执行文件或...

    MakeFile 中文手册.pdf

    Makefile中的自动变量包括$@、$&lt;、$^等,它们代表了目标、第一个依赖或所有依赖等。使用自动变量可以使Makefile更加简洁,减少重复的命令书写。 8. 特殊目标 Makefile中有几个特殊的目标,例如伪目标.PHONY,用于...

    makefile_example:第一个makefile

    一个简单的示例显示了使用编译数据库帮助YCM对C / C ++进行语义完成。 用法 只需运行compiledb -nf make创建一个compile_commands.json,它将由YCM自动使用。 更多详细信息: 如何运行/清理该项目? make make run...

    Makefile入门与提高

    - 第一行定义了编译器为`gcc`。 - 第二行定义了编译选项`-Wall`,表示开启所有警告。 - `all: myprogram`表示`all`目标依赖于`myprogram`目标,即默认构建时将构建`myprogram`。 - `myprogram: main.o foo.o`表示`my...

    makefile 文件详细说明

    1. **目标(Target)**:这是makefile中的第一条命令将要操作的文件,通常是可执行文件或者库文件。 2. **依赖文件(Dependency)**:目标文件依赖于这些文件,通常是源代码文件或头文件。 3. **规则(Rule)**:...

    makefile经典扫盲贴

    Makefile还支持规则链式,通过`$@`和`$来引用当前目标和第一个依赖: ```makefile %.o: %.c $(CC) $(CFLAGS) -c $$@ ``` 这个规则表示,对于任何`.c`文件,都可以生成对应的`.o`目标文件。 条件语句和函数也是...

    1秒变Makefile达人

    模式规则允许使用通配符定义一个规则,自动变量则简化了命令行的书写,如$@表示目标文件名,$&lt;表示第一个依赖文件名等。 学习Makefile的过程中,可以通过分析实际的项目中的Makefile来加深理解。例如,Linux内核...

    Makefile中文教程.pdf

    当make运行时,它首先检查makefile中指定的默认目标,通常是第一个目标。make会检查每个目标的依赖是否比目标更新,如果是,make将执行目标下的命令来更新目标。命令需要在新的shell中执行,所以每个命令前面都需要...

    hello-makefile自生成

    创建"hello"项目的第一步,我们需要编写一个简单的C程序,如`hello.c`,其内容可能如下: ```c #include int main() { printf("Hello, World!\n"); return 0; } ``` 接下来,我们将为这个项目编写Makefile。一...

Global site tag (gtag.js) - Google Analytics