我是靠谱客的博主 合适银耳汤,最近开发中收集的这篇文章主要介绍一个通用的Makefile(自动遍历文件、C和C++混合)支持完整Makefile:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 支持
    • 1.自动遍历源文件
    • 2.C和C++文件混合使用
    • 3.链接库
    • 4.其他编译选择
  • 完整Makefile:

这是一个通用的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)



最后

以上就是合适银耳汤为你收集整理的一个通用的Makefile(自动遍历文件、C和C++混合)支持完整Makefile:的全部内容,希望文章能够帮你解决一个通用的Makefile(自动遍历文件、C和C++混合)支持完整Makefile:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部