两个简单的makefile的实现,编译当前目录下所有的.c文件

在网上找到的一个非常好的makefile文件,可以编译本文件夹下的所有.c文件,之需要定义输出文件名,不需要指定main文件的文件名,非常的好,非常的方便,注释也很详细,收藏并分享给需要的人。

#####################################################################
## file        : test makefile for build current dir .c            ##
## author      : jernymy                                           ##
## date-time   : 05/06/2010                                        ##
#####################################################################

CC      = gcc
CPP     = g++
RM      = rm -rf

## debug flag
DBG_ENABLE   = 1

## source file path
SRC_PATH   := .

## target exec file name
TARGET     := test

## get all source files
SRCS         += $(wildcard $(SRC_PATH)/*.c)

## all .o based on all .c
OBJS        := $(SRCS:.c=.o)


## need libs, add at here
LIBS := pthread

## used headers  file path
INCLUDE_PATH := .

## used include librarys file path
LIBRARY_PATH := /lib

## debug for debug info, when use gdb to debug
ifeq (1, ${DBG_ENABLE}) 
	CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1
endif

## get all include path
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))

## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))

## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))


all: clean build

build:
	$(CC) -c $(CFLAGS) $(SRCS)
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
	$(RM) $(OBJS)

clean:
	$(RM) $(OBJS) $(TARGET)

注意有一些空行的开头是tab键,但是csdn自动改成了4个空格。需要注意。

# $Id: Makefile,v 2.0 2008/10/08 18:55:40 Update $ 
prog_name = testtcp #目标文件名
###################################### 
# 
# Generic makefile 
# 
# by Jackie Xie 
# email: jackie.CPlusPlus@gmail.com 
# 
# Copyright (c) 2008 Jackie Xie 
# All rights reserved. 
# 
# No warranty, no liability; 
# you use this at your own risk. 
# 
# You are free to modify and 
# distribute this without giving 
# credit to the original author. 
# 
###################################### 
### Customising 
# 
# Adjust the following if necessary; EXECUTABLE is the target 
# executable"s filename, and LIBS is a list of libraries to link in 
# (e.g. alleg, stdcx, iostr, etc). You can override these on make"s 
# command line of course, if you prefer to do it that way. 
# 
EXECUTABLE := $(prog_name) 
LIBS := -lpthread #库文件   没有可不写
# Now alter any implicit rules" variables if you like, e.g.: 
# 
CFLAGS := -g -Wall -O
CXXFLAGS := $(CFLAGS) 
CC := arm-linux-gcc   #编译器
# The next bit checks to see whether rm is in your djgpp bin 
# directory; if not it uses del instead, but this can cause (harmless) 
# `File not found" error messages. If you are not using DOS at all, 
# set the variable to something which will unquestioningly remove 
# files. 
# 
ifneq ($(wildcard $(DJDIR)/bin/rm),) 
RM-F := rm -f 
else 
RM-F := del 
endif 
# You shouldn"t need to change anything below this point. 
# 
# ................... 
SOURCE := $(wildcard *.cpp) $(wildcard *.c) 
OBJS := $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCE))) 
DEPS := $(patsubst %.o,%.d,$(OBJS)) 
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS)) 
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.cpp,$(MISSING_DEPS)) $(patsubst %.d,%.cpp,$(MISSING_DEPS))) 
CPPFLAGS += -MD 
.PHONY : everything deps objs clean veryclean rebuild 
everything : $(EXECUTABLE) 
deps : $(DEPS) 
objs : $(OBJS) 
clean :
	@$(RM-F) *.o 
	@$(RM-F) *.d
 
veryclean: clean
	@$(RM-F) $(EXECUTABLE)
	@$(RM-F) *.*~ *~ 
distclean: veryclean 
rebuild: veryclean everything 
ifneq ($(MISSING_DEPS),) 
$(MISSING_DEPS) :
	@$(RM-F) $(patsubst %.d,%.o,$@) 
endif 
-include $(DEPS)
 
$(EXECUTABLE) : $(OBJS)
	$(CC) -o $(EXECUTABLE) $(OBJS) $(addprefix ,$(LIBS))

这个也是我经常用的makefile,有汉语注释更容易理解。


  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值