附录
Makefile 实战
以下分享一个我编写的一个 Makefile。
此 Makefile 的功能是将对应的 .c 或 .cpp 的源代码编译成对应的可执行程序。如 aaa.c 会编译成 aaa;bbb.cpp 会编译成 bbb。这个 Makefile 可以帮助编写 C 和 C++ 程序的朋友快速编译自己的程序。
此 Makefile 可以用于 MacOS 和 Linux 系统中。
使用方法:
命令
说明
make 或 make all编译当前文件夹下所有的
.c 和 .cpp 文件,并调用深层次文件夹内的 Makefile 进行编译make clean删除当前文件夹下所有的
.c 和 .cpp 编译后的文件,并调用深层次文件夹内的 Makefile 进行清理#*************************************
# 魏明择的官方网站
# https://weimingze.com
# 创建人 : 魏明择
# 创建日期: 2016年11月1日
# 魏明择版权所有,保留所有权利。
#************************************/
CC := gcc
CFLAG := -Wall -g -lpthread
CXX := g++
CXXFLAG := -Wall -g
CXXFLAG += -std=c++11 # for C++ 11 支持
LIBS := -lpthread
C_SRCS := $(wildcard *.c) #搜索所有的.c文件
CPP_SRCS := $(wildcard *.cpp) #搜索所有的.cpp文件
CTARGETS := ${C_SRCS:%.c=%} #把所有的.c文件转换成文件名的目标文件
CPPTARGETS := ${CPP_SRCS:%.cpp=%} #把所有的.cpp文件转换成文件名的目标文件
MAKEFILS := $(wildcard */[mM]akefile) #搜索下一层目录下所有的Makefile文件
SUBDIRS := $(dir $(MAKEFILS)) #提取出所有的目录
#以下删除XCode编译器留下的.dSYM文件夹
XCODE_DSYM := ${C_SRCS:%.c=%.dSYM}
XCODE_DSYM += ${CPP_SRCS:%.cpp=%.dSYM}
all : $(CTARGETS) $(CPPTARGETS)
@for MYDIR in $(SUBDIRS) ; do make -C $${MYDIR} $@ ; done
% : %.c
$(CC) -o $@ $< $(CFLAG) $(LIBS)
% : %.cpp
$(CXX) -o $@ $< $(CXXFLAG) $(LIBS)
clean:
@for MYDIR in $(SUBDIRS) ; do make -C $${MYDIR} $@ ; done
rm -f $(CTARGETS) $(CPPTARGETS)
rm -rf $(XCODE_DSYM)
缺点:
此 Makefile 只能对单个的源代码程序编译生成单独的应用程序。不能将多个 .c 和 .cpp 合并成一个 应用程序。
练习:
编写一个 Makefile,可以将此文件夹内的所有 .c 和 .cpp 文件编译并链接称为一个应用程序,应用程序名可以叫做 myapp 或者使用当前文件夹的名称作为应用程序名。