C、C++的Makefile模板

Makefile模板

CC = gcc
LD = $(CC)

TARGET = $(notdir $(CURDIR))

SRC_DIR = .
INCLUDE_DIR += .

C_FLAGS = -g -Wall
LD_FLAFS = 
LD_LIBS =
INCLUDES = -I$(INCLUDE_DIR)

ifeq ($(CC), g++)
    TYPE = cpp
    SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
    OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
else
    TYPE = c
    SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
    OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
endif

all : $(TARGET)
    @echo "Builded target:" $^
    @echo "Done"

$(TARGET) : $(OBJS)
    @echo "Linking" $@ "from" $^ "..."
    $(LD) -o $@ $^ $(LD_FLAGS) $(LD_LIBS)
    @echo "Link finished\n"

$(OBJS) : %.o:%.$(TYPE) 
    @echo "Compiling" $@ "from" $< "..."
    $(CC) -c -o $@ $< $(C_FLAGS) $(INCLUDES)
    @echo "Compiled finished\n"

.PHONY : clean cleanobj
clean : cleanobj
    @echo "Remove all executable file"
    rm -f $(TARGET)
cleanobj :
    @echo "Remove binary files"
    rm -f *.o

用法

编译C程序

make

编译C++程序

make CC=g++

或者将Makefile中的 CC = gcc 改成 CC = g++ ,然后

make

其他

TARGET 指定生成的可执行文件名,我这里用的是当前所在目录名

SRC_DIR 指定源文件(.c .cpp)文件的路径

INCLUDE_DIR 指定头文件路径

C_FLAGS 指定编译参数选项

LD_FLAFS 指定链接参数选项

LD_LIBS 指定链接库

清除生成的文件:

# 清空全部生成文件
make clean
# 清空生成的中间文件
make cleanobj

Tips

对于Ubuntu系统,可以将Makefile文件复制到 ~/Templates (中文环境为 ~/模板 )目录下,这样就可以在任意目录下右键添加该Makefile模板。

终端输入:

gedit ~/.bashrc

~/.bashrc 文件中添加一行

alias Makefile="cp ~/Templates/Makefile ./"

保存后输入:

source ~/.bashrc

生效之后,就可以通过在命令行输入 Makefile ,来创建Makefile模板了。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章