本文章示例代码来自别人博客,但是直接考下来,确实有坑,对于初学者十分不理,我亲自把代码实现一遍之后,再放上来,保证代码可以正确运行,请读者放心使用。
一个main程序依赖其余四个文件,包括两个源文件,两个头文件
main.c
#include"mytool1.h"
#include"mytool2.h"
int main(void)
{
mytool1_print("hello1");
mytool2_print("hello2");
return 0;
}
//mytool1.c
#include<stdio.h>
#include"mytool1.h"
void mytool1_print(char *print_str)
{
printf("this is mytool1 print %s",print_str);
}
//mytool1.h
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
//mytool2.c
#include "mytool2.h"
#include <stdio.h>
void mytool2_print(char *print_str)
{
printf("this is mytool2 print %s",print_str);
}
//mytool2.h
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
最普通的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 mytool1.h
gcc -c mytool1.c
mytool2.o : mytool2.c mytool2.h
gcc -c mytool2.c
.PHONY: clean
clean:
rm main *.o
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:
# 这是简化后的Makefile
main: main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o : main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o : mytool1.c mytool1.h
gcc -c $<
mytool2.o : mytool2.c mytool2.h
gcc -c $<
.PHONY: clean
clean:
rm main *.o
个人感觉对于新手先假话到这里即可,以后随着学习的深入和掌握的熟练程度,再次学习更加高深的写法。