摘要
C/C++代码都需要使用编译器来编译代码生成相应的目标文件,在大部分的windows开发中,开发者多用商用或开源的集成开发环境(IDE),比如:visual studio、Keil、VC++6.0、Qt creater等等。在这些IDE中都是在维护一个makefile或者类似makefile的一个文件,IDE使用比较简单是因为它把用户使用鼠标或者键盘对于IDE界面上案件的操作通通记录在这个makefile文件中相应的操作。然后编译器(代码解释器)通过makefile文件操作相应的用户代码进行编译、链接、生成可执行文件。这个在linux操作系统中成熟的商用IDE就比较少,开发者们一般都是使用CMake将需要编译的代码文件通过一张表(Cmakelist)罗列出来,通过CMake工具生成相应的makefile文件然后再通过makefile文件对代码进行操作。本文主要记录一个一般性的简单c++工程使用的makefile文件。
目录结构
project folder:用于存放用户工程的最顶层目录,本文的makefile文件放在该目录中
src:用于存放源代码文件以及源代码各个子模块的文件夹
inc:用于存放用户新建的各种头文件
lib:存放第三方库文件
obj:存放生成的中间文件(.o文件)
out:存放最终生成物(可执行文件)
本文makefile步包含第三方库文件的加入
相应的makefile文件
SRC_DIR := ./src
INC_DIR := ./inc
OUT_DIR := ./out
OBJ_DIR := ./obj
CC := g++
out := $(OUT_DIR)/zeng_project.out
INC_DIR += ./inc/sub_path1
INC_DIR += ./inc/sub_path2
INC_DIR += ./inc/sub_path......
INC_DIR += ./inc/sub_pathn
CPP_FLAGS := $(foreach dir, $(INC_DIR), -I$(wildcard $(dir)))
cpp_srcs := $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp))
cpp_srcs += ./src/sub_path1/*.cpp
cpp_srcs += ./src/sub_path2/*.cpp
cpp_srcs += ./src/sub_path....../*.cpp
cpp_srcs += ./src/sub_pathn/*.cpp
objs := $(addprefix $(OBJ_DIR)/, $(notdir $(cpp_srcs:.cpp=.o)))
$(out):$(objs)
$(CC) $^ -o $@
vpath %.cpp $(sort $(dir $(cpp_srcs)))
$(OBJ_DIR)/%.o:%.cpp
$(CC) $(CPP_FLAGS) -c $< -o $@
.PHONY:clean
clean:
rm -rf ./out/*
rm -rf ./obj/*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)