make
make是个命令,是个可执行程序,用来解析Makefile文件的命令
makefile
makefile 是个文件,这个文件中描述了咱们程序的编译规则
makefile语法规则
目标:依赖文件列表
<Tab>命令列表
make命令格式
make [ ‐f file ] [ targets ]
Makefile案例
sum.c
#include "head.h"
int sum(int a, int b) {
return a + b;
}
sub.c
#include "head.h"
int sub(int a, int b) {
return a ‐ b;
}
head.h
#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
int sum(int a, int b);
int sub(int a, int b);
#endif
Makefile
main:main.o sub.o sum.o
gcc main.o sub.o sum.o ‐o main
main.o:main.c
gcc ‐c main.c ‐o main.o
sub.o:sub.c
gcc ‐c sub.c ‐o sub.o
sum.o:sum.c
gcc ‐c sum.c ‐o sum.o
clean:
rm *.o main a.out ‐rf
预定义变量
makefile中有许多预定义变量,这些变量具有特殊的含义,可在makefile中直接使用。
$@ 目标名
$< 依赖文件列表中的第一个文件
$^ 依赖文件列表中除去重复文件的部分
AR 归档维护程序的程序名,默认值为ar
ARFLAGS 归档维护程序的选项
AS 汇编程序的名称,默认值为as
ASFLAGS 汇编程序的选项
CC C编译器的名称,默认值为cc
CFLAGS C编译器的选项
CPP C预编译器的名称,默认值为$(CC) -E
CPPFLAGS C预编译的选项
CXX C++编译器的名称,默认值为g++
CXXFLAGS C++编译器的选项
CC=gcc
obj=main
obj1=sub
obj2=sum
OBJ=main.o sub.o sum.o
CFLAGS=‐Wall ‐g
$(obj):$(OBJ)
$(CC) $^ ‐o $@
$(obj).o:$(obj).c
$(CC) $(CFLAGS) ‐c $< ‐o $@
$(obj1).o:$(obj1).c
$(CC) $(CFLAGS) ‐c $< ‐o $@
$(obj2).o:$(obj2).c
$(CC) $(CFLAGS) ‐c $< ‐o $@
clean:
rm *.o $(obj) a.out ‐rf
精简版
CC=gcc
obj=main
OBJ=main.o sub.o sum.o
CFLAGS=‐Wall ‐g
$(obj):$(OBJ)
$(CC) $^ ‐o $@
%*.o:%*.c
$(CC) $(CFLAGS) ‐c $< ‐o $@
clean:
rm *.o $(obj) a.out ‐rf
标签:obj,sub,int,sum,makefile,CC,main
From: https://www.cnblogs.com/tian0926/p/17364610.html