一个通用的Makefile(自动遍历文件、C和C++混合)

13 篇文章 0 订阅


这是一个通用的Makefile

支持

1.自动遍历源文件

  自动遍历源文件文件部分参考 https://blog.csdn.net/yuliying/article/details/49635485

AllDIRS := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') .
CSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.c)) 
CXXSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.cpp)) 

  暂时无法遍历头文件,使用时如头文件不在当前路径,需添加头文件路径,如:

INC_PATH = -I $(SRC_PATH) \
				-I $(SRC_PATH)/inc\

2.C和C++文件混合使用

  C和CPP文件分开编译,使用g++链接

%.o : %.cpp

	$(CXX) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  $@ $(INC_PATH) $(LIB_PATH);

$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o $@ $(INC_PATH) $(LIB_PATH);

	@echo "> build success <"	

3.链接库

  如需链接库(如线程-lpthread)则将选项加在LIB_PATH = 后

LIB_PATH = -lpthread

4.其他编译选择

  如需添加其他编译选项(如-g支持GDB调试)则将选项加在DEBUG_FLAG :=后

DEBUG_FLAG := -g

完整Makefile:

TARGET = exe

CC = gcc

CXX = g++


AllDIRS := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') .

CSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.c)) 

CXXSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.cpp)) 

OBJS := $(CSRCS:.c=.o) $(CXXSRCS:.cpp=.o)

SRC_PATH = .


INC_PATH = -I $(SRC_PATH) \
				-I $(SRC_PATH)/inc\


LIB_PATH = -lpthread

DEBUG_FLAG  =

#DEBUG_FLAG := -g				


%.o : %.cpp

	$(CXX) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  $@ $(INC_PATH) $(LIB_PATH);


$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o $@ $(INC_PATH) $(LIB_PATH);

	@echo "> build success <"


.PHONY:clean


clean:

	rm -f $(OBJS) $(TARGET)



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值