Makefile怎么写?

#指定项目.c所存在的文件夹
SRC_DIR=					./ ../SOURCE/DAQ/CameraVision ../SOURCE/DAQ/DOWNLOAD_INFO ../SOURCE/DAQ/INERTIAL_NV \
							../SOURCE/DAQ/LiDAR ../SOURCE/FUSE_DATE ../SOURCE/MC ../SOURCE/PLANNING \
							../SOURCE/TOOL ../APPlication ../DRV/IN_DRV
vpath %.c					./:../SOURCE/DAQ/CameraVision:../SOURCE/DAQ/DOWNLOAD_INFO:../SOURCE/DAQ/INERTIAL_NV:../SOURCE/DAQ/LiDAR:\
							../SOURCE/FUSE_DATE ../SOURCE/MC:../SOURCE/PLANNING:../SOURCE/TOOL:../APPlication:\
							../DRV/IN_DRV

#输出文件名
OUTPUT:=					road_get

#输出目录
OUTPUT_DIR=					../SOURCE/Exe_File

#交叉编译1
#CC:=						arm-linux-gcc
#CXX:=						arm-linux-g++
#LIB_DIR:=					-L$(PROJ_DIR)/lib/arm-linux-gcc

#交叉编译2
#CC:=						arm-linux-gnueabihf-gcc
#CXX:=						arm-linux-gnueabihf-g++
#LIB_DIR:=					-L$(PROJ_DIR)/lib/arm-linux-gnueabihf-gcc
 
#交叉编译3
#CC:=						aarch64-himix100-linux-gcc
#CXX:=						aarch64-himix100-linux-g++
#LIB_DIR:=					-L../../LIB/aarch64-himix100-linux-gcc


#标准编译
CC:=						gcc -g
CXX:=						g++
LIB_DIR:=					-L../LIB/gcc

#包含路径
INCLUDE_DIR:=				-I../APPlication
INCLUDE_DIR+=				-I../DRV/IN_DRV
INCLUDE_DIR+=				-I../SOURCE/DAQ/CameraVision
INCLUDE_DIR+=				-I../SOURCE/DAQ/DOWNLOAD_INFO
INCLUDE_DIR+=				-I../SOURCE/DAQ/INERTIAL_NV
INCLUDE_DIR+=				-I../SOURCE/DAQ/LiDAR
INCLUDE_DIR+=				-I../SOURCE/FUSE_DATE
INCLUDE_DIR+=				-I../SOURCE/MC
INCLUDE_DIR+=				-I../SOURCE/PLANNING
INCLUDE_DIR+=				-I../SOURCE/TOOL
#依赖项
LIB:=						-lrt -lpthread -lm #-ludev #-nostdinc

#遍历所有子目录中的.c文件
SRC =						$(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))

#指定.o文件的存放目录
OBJ_DIR=					../Obj

#目标文件
OBJ:=						$(patsubst %.c,%.o,$(SRC))
#$(info "OBJ:$(OBJ)")#调试打印

#去.o文件地址,只保留文件名
OBJ_WITHOUT_DIR = $(notdir $(OBJ))
#$(info "OBJ_WITHOUT_DIR:$(OBJ_WITHOUT_DIR)")#调试打印

#将生成的.o文件与指定目录相绑定
OBJ_WITH_DIR = $(addprefix $(OBJ_DIR)/,$(OBJ_WITHOUT_DIR))
#$(info "OBJ_WITH_DIR:$(OBJ_WITH_DIR)")#调试打印

#必须先执行 OBJ_WITHOUT_DIR ,才能有OBJ_WITH_DIR依赖
all: clean $(OBJ_WITHOUT_DIR) $(OUTPUT)

$(OUTPUT):$(OBJ_WITH_DIR)
	$(CC) -o $(OUTPUT_DIR)/$@ $^ $(LIB_DIR) $(LIB)
%.o:%.c
	$(CC) $(INCLUDE_DIR) $(LIB_DIR) $(LIB) -c $< -o $(OBJ_DIR)/$@

clean:
	rm -rf $(OUTPUT) $(OBJ_DIR)/*.o

.PHONY: all clean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile是一个用于编译和构建程序的文件,它包含了一系列的规则和指令,告诉编译器如何编译和链接代码。下面是一个简单的Makefile示例,它用于编译一个C语言程序。 假设我们有以下的C语言程序文件: ``` // main.c #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` 我们希望编译这个程序并生成可执行文件。这个Makefile包含了两个部分,变量和规则: ``` # 变量定义 CC = gcc CFLAGS = -Wall -Werror # 规则定义 all: main main: main.o $(CC) -o main main.o main.o: main.c $(CC) $(CFLAGS) -c main.c clean: rm -f main main.o ``` 在这个Makefile中,我们定义了两个变量: - CC:指定了编译器的名称,这里使用gcc。 - CFLAGS:指定了编译选项,这里使用了-Wall和-Werror选项。 接下来,我们定义了三个规则: - all:默认规则,执行这个规则会编译生成可执行文件main。 - main:依赖于main.o文件,执行这个规则会链接生成可执行文件main。 - main.o:依赖于main.c文件,执行这个规则会编译生成目标文件main.o。 最后,我们定义了一个clean规则,用于清除生成的文件。 要编译这个程序,只需要在命令行中输入make命令,即可自动执行Makefile中的规则。如果想要清除生成的文件,可以输入make clean命令。 Makefile是一个非常强大的工具,可以用于编译各种不同的语言和项目。但是,复杂的Makefile也很容易出错,需要仔细检查每一个规则和变量的定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值