文章目录
一、makefile
Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
如果ubuntu没有Makefile,需要安装时,执行下面命令
Makefile执行标准
sudo apt install make
sudo apt install make-guile
以Makefile来写
目标 依赖
main:main.c
gcc main.c -o main #具体执行的命令
版本1:
main:main.c add.c sub.c
gcc main.c add.c sub.c -o main
版本2:(引入变量)
Makefile变量直接写名字就行了
变量引用:$(变量名)
TARGET=main #TARGET变量
CC=gcc
SRCS=main.c add.c sub.c
$(TARGET):$(SRCS)
$(CC) $(SRCS) -o $(TARGET)
版本3:(引入函数)
TARGET=main #TARGET变量
CC=gcc
SRCS=$(wildcard *.c) #查找当前目录所有的.c
$(TARGET):$(SRCS)
$(CC) $(SRCS) -o $(TARGET)
版本4:(添加中间变量.o)
TARGET=main #TARGET变量
CC=gcc
SRCS=$(wildcard *.c) #查找当前目录所有的.c
OBJ=$(patsubst %.c,%.o,$(SRCS)) #函数patsubst将.c替换为.o
$(TARGET):$(OBJ)
$(CC) $(OBJ) -o $(TARGET)
版本5:(添加清除操作)
TARGET=main #TARGET变量
CC=gcc
SRCS=$(wildcard *.c) #查找当前目录所有的.c
OBJ=$(patsubst %.c,%.o,$(SRCS)) #函数patsubst将.c替换为.o
$(TARGET):$(OBJ)
$(CC) $(OBJ) -o $(TARGET) #gcc add.o sub.o main.o max.o -o main
clean: #用于清除
rm $(OBJ)
版本6:(用特殊字符代替目标及依赖)
$@:表示目标 $<:初级依赖 $^:终级依赖
TARGET=main #TARGET变量
CC=gcc
SRCS=$(wildcard *.c) #查找当前目录所有的.c
OBJ=$(patsubst %.c,%.o,$(SRCS)) #函数patsubst将.c替换为.o
$(TARGET):$(OBJ)
$(CC) $^ -o $@
%.o:%.c #.c生成.o
$(CC) -c $< -o $@
clean: #用于清除
rm main $(OBJ)
终级版本7:
TARGET=main
CC=gcc
CFLAGS=-I /mnt/hgfs/linuxshare/program/include #指定头文件路径
DIRS=src . #表示.c所在的路径
FILES=$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c)) #循环查看.c文件*/
OBJ=$(patsubst %.c,%.o,$(FILES))
$(TARGET):$(OBJ)
$(CC) $(OBJ) -o $(TARGET) $(CFLAGS)
clean: #用于清除
rm main $(OBJ)
编译时直接在终端上输入:make
清除中间文件在终端上输入:make clean
二、制作开发板动态库
(1)
(2)
(3)
(4)
(5)
(6)
(7)