makefile 多目标规则

该Makefile文件描述了一个在交叉编译环境下的C/C++项目构建过程,使用arm-linux-gnueabi工具链。它包括了源码的组织、对象文件的生成、编译选项如-Wall和-Wno-missing-braces,以及OpenCV库的链接。项目会生成静态库,并使用pkg-config管理OpenCV的头文件路径和库路径。
摘要由CSDN通过智能技术生成


#CROSS    = arm-linux-gnueabi-
CC    = $(CROSS)gcc
CXX = $(CROSS)g++

.PHONY    :all
.PHONY    :clean

C_SRC    := $(wildcard *.c)
X_SRC    := $(wildcard *.cpp)

COM_SRC    := common.c
COM_OBJ    := $(COM_SRC:%.c=./obj/%.o)

C_OBJ    := $(patsubst %.c, ./obj/%.o, $(C_SRC))
C_OBJ    := $(filter-out $(COM_OBJ),$(C_OBJ)) 

X_OBJ    := $(patsubst %.cpp, ./obj/%.o, $(X_SRC))

C_TAG    := $(notdir $(C_OBJ:%.o=%))
X_TAG    := $(notdir $(X_OBJ:%.o=%))


CFLAGS        = -static -Wall -Wno-missing-braces
CPPFLAGS    += -g -std=c++11 -Wall -Wno-unused-but-set-variable -Wno-unused-variable 


CV_INC    +=`pkg-config --cflags opencv4`
CV_LIBS    +=`pkg-config --libs opencv4`
LIBS    = -lm -lpthread


.PHONY:all
.PHONY:clean  

#TARGET := $(C_TAG)
TARGET := $(C_TAG) $(X_TAG)
####TARGET = $(C_TAG)  $(X_TAG)

all:$(TARGET)
    @echo "<======== over .. ======>"
    
$(C_TAG):$(C_OBJ) $(COM_OBJ)
    $(CC) -o $@ ./obj/$@.o $(COM_OBJ) $(LIBS)

$(X_TAG):$(X_OBJ)
    $(CXX) -o $@ ./obj/$@.o $(CV_LIBS)
    
./obj/%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@  -fdiagnostics-color=auto    

./obj/%.o:%.cpp
    $(CXX) $(CV_INC) $(CPPFLAGS) -c $< -o $@ -fdiagnostics-color=auto


clean:  
    -rm -f ./obj/* $(TARGET)
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值