Makefile $@ $^ $< 三个常用变量

xiaoxiao2021-02-28  115

本文章示例代码来自别人博客,但是直接考下来,确实有坑,对于初学者十分不理,我亲自把代码实现一遍之后,再放上来,保证代码可以正确运行,请读者放心使用。

一个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 个人感觉对于新手先假话到这里即可,以后随着学习的深入和掌握的熟练程度,再次学习更加高深的写法。

转载请注明原文地址: https://www.6miu.com/read-32908.html

最新回复(0)