第一个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程序,但是要是编译这样一个程序要用到以下命令:

[b]
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
[/b]

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

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

在同一个文件夹中建立一个makefile的文件,没有 后缀名。
内容为:
[b]
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
[/b]

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

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

你可能感兴趣的:(gcc,一步步)