多文件编译:MakeFile
一般由一个main.c文件外加若干个子函数文件,同时会存在一个后缀是.h的文件组成
如何书写头文件
引用头文件的两中方式:
方式1:#include <头文件名>
方式2:#include “头文件名”
区别:
<>:会去系统标准的库头文件路径去查找该.h文件 /user/include
" ":会去用户当前工作路径下去查找这个.h头文件
书写头文件的格式:
自定义的头文件后缀为.h
书写格式:(test.h)
#ifndef _TEST_H_
#define _TEST_H_
//头文件(调用标准库头文件)
//结构体定义
//枚举
//宏定义
//函数声明
#endif
以上书写头文件的方式为“条件编译”,作用是为了防止头文件被重复包含。
工程目录结构如下:
make:可以用于管理工程
管理工程的特点:根据一个叫做“时间戳”的概念去执行工程
意味着只会将参与过修改的文件再次更新在工程中,减少代码编译占用资源
Make格式:
目标:依赖
[Tab]命令表
解释:
目标:终极产品
依赖:生成终极产品所具备的要素
命令表:交代了终极产品的制作过程
如何执行Make:
make 目标
Make工程中的变量:
用户自定义变量
变量名=值
自动变量
$<:第一个依赖
$^:所有依赖
$@:目标名
系统预定义变量
有特定的含义:
CC:编译器的名称,默认值为cc,我们可以指定为gcc
CFLAGS:编译器的选项,无默认值,我们可以指定为:-c -g -Wall
RM:可以删除文件,默认值为:rm -f,我们可以指定:rm -rf
环境变量
export------->可以添加变量到整个工程中去
示例:
Makefile:
#定义一个整个工程中用到的变量
OBJS:=menu.o input.o output.o malloc.o main.o first_ave.o two_failed.o all_s.o
CC:=gcc
CFLAGS:=-c -g -Wall
export OBJS CC CFLAGS
All:
make -C ./src/
make -C ./obj/
.PHONY:clean
clean:
$(RM) ./obj/*.o
$(RM) ./bin/*
src下makefile:
All:menu.o malloc.o input.o output.o first_ave.o two_failed.o all_s.o main.o
mv $^ ../obj/
menu.o:menu.c
$(CC) $(CFLAGS) $< -o $@
malloc.o:malloc.c
$(CC) $(CFLAGS) $< -o $@
input.o:input.c
$(CC) $(CFLAGS) $< -o $@
output.o:output.c
$(CC) $(CFLAGS) $< -o $@
first_ave.o:first_ave.c
$(CC) $(CFLAGS) $< -o $@
two_failed.o:two_failed.c
$(CC) $(CFLAGS) $< -o $@
all_s.o:all_s.c
$(CC) $(CFLAGS) $< -o $@
main.o:main.c
$(CC) $(CFLAGS) $< -o $
obj下makefile:
All:test
mv $^ ../bin/
test:$(OBJS)
$(CC) $^ -o $@