#MinGW 5.1.6
.PHONY:clean tidy rebuild
SRCDIR = src
LIBDIR = lib
DOCSDIR = docs
BUILDDIR = build
CC = C:\MinGW\bin\g++.exe
SRCEXT = cpp
DEPEXT = depend
RM = del /f /q
MKDIR = mkdir
RMDIR = rmdir /q /s
FLAGS = -g -Wall -O3 #-save-temps #-fdump-class-hierarchy #-dump_class_hierarchy
LIBPATHS = -L"C:\MingW\lib" -L"${LIBDIR}"
LIBS = #-lopengl32 #-mwindows
SRCT = *.${SRCEXT}
SRCS += ${SRCT}
SRCS += */${SRCT}
SRCS += */*/${SRCT}
SRCS += */*/*/${SRCT}
SRCS += */*/*/*/${SRCT}
SRCS += */*/*/*/*/${SRCT}
SRC = ${wildcard ${addprefix ${SRCDIR}/,${SRCS}}}
OBJ = ${patsubst ${SRCDIR}/%.${SRCEXT},${BUILDDIR}/%.o,${SRC}}
DEP = ${patsubst ${SRCDIR}/%.${SRCEXT},${BUILDDIR}/%.${DEPEXT},${SRC}}
BIN = ${BUILDDIR}/${notdir ${CURDIR}.exe}
build: ${BIN}
rebuild: tidy build
${BIN}: ${OBJ}
@echo make target: ${BIN}
@${CC} ${FLAGS} $^ ${LIBPATHS} ${LIBS} -o $@
prepare:
@echo prepare folders
@if not exist ${BUILDDIR} (${MKDIR} ${BUILDDIR} && @echo make directory: ${BUILDDIR})
@if not exist ${DOCSDIR} (${MKDIR} ${DOCSDIR} && @echo make directory: ${DOCSDIR})
# @if not exist ${subst /,\,${dir ${@}}} (${MKDIR} ${subst /,\,${dir ${@}}} && @echo make directory: ${subst /,\,${dir ${@}}})
@xcopy ${SRCDIR} ${BUILDDIR} /T /E
clean:
@echo remove build directory and docs directory
@if exist ${BUILDDIR} (@${RMDIR} ${BUILDDIR})
@if exist ${DOCSDIR} (@${RMDIR} ${DOCSDIR})
tidy:
@echo tidy dependencies, objects and binaries only
${foreach file,${subst /,\,${OBJ}},@if exist ${file} (${RM} ${file}) &&}@echo on
${foreach file,${subst /,\,${DEP}},@if exist ${file} (${RM} ${file}) &&}@echo on
sinclude ${DEP}
${BUILDDIR}/%.${DEPEXT}:${SRCDIR}/%.${SRCEXT}
@if not exist ${BUILDDIR} (${MKDIR} ${BUILDDIR} && @echo make directory: ${BUILDDIR})
@if not exist ${subst /,\,${dir ${@}}} (${MKDIR} ${subst /,\,${dir ${@}}} && @echo make directory: ${subst /,\,${dir ${@}}})
@echo make dependency for ${patsubst ${SRCDIR}/%.${SRCEXT},${BUILDDIR}/%.o,${<}}
@${CC} -MM -MT ${patsubst ${SRCDIR}/%.${SRCEXT},${BUILDDIR}/%.o,${<}} ${<} > ${@}
@echo @@echo make object: ${patsubst ${SRCDIR}/%.${SRCEXT},${BUILDDIR}/%.o,${<}} >> ${@}
@echo @@$${CC} $${FLAGS} -c -o $$@ $${filter %%.${SRCEXT},$$^^} >> ${@}
分享到:
相关推荐
Makefile编写实例: 1.前提是需要安装MInGw——c/c++编译器,不懂的可以私信我哈; 2.本程序是利用bat脚本直接运行...3.makefile为采用通用性规则编写,自动搜索所在目录中的代码,自动编译; 4.适应于编译C++/C代码。
我写的makefile for mingw + wxWidgets, makefile可作为通用模板,编译C++ wxWidgets GUI 库。另外带一个小例子,用户改makefile的头部就可以完成,资源文件链接,debug, release版本编译,shared 库 非shared 库...
使用 MingW-w64,开发者可以利用 GDB (GNU Debugger) 进行程序调试,利用 Makefile 管理项目构建,还可以通过 Autotools 或 CMake 等工具生成跨平台的构建系统。对于初学者,MingW-w64 提供了一个轻量级的环境,可以...
在这个上下文中,可能包含通用的Makefile模板、预定义的规则或其他配置文件,这些可以帮助开发者快速搭建构建环境或者定制特定的构建行为。此外,可能还有一些用于国际化和本地化的文件,如翻译过的错误消息或帮助...
可以使用`make mingw`命令自动生成适用于mingw64的Makefile,或者手动编辑Makefile,确保其中的编译器路径和选项正确。 4. **编译hiredis**:在命令行中输入`make`,这将启动编译过程。如果一切顺利,hiredis的动态...
USB(通用串行总线)接口通常用于设备与计算机之间的数据传输,例如在嵌入式系统或硬件设备驱动程序中。 Qt是一个流行的开源跨平台应用开发框架,支持C++和QML。在这个项目中,Qt可能是用来创建用户界面或管理与...
该项目(文档)是关于基于 ATMEL AVR 的开发的通用自制 makefile。 介绍 我创建了这个 makefile,因为我对自动生成的 makefile 不满意,可以在网上找到。 所有这些都太笼统和复杂,很难理解他们在做什么,他们使用了...
1. **开源和免费**:MinGW是遵循GNU通用公共许可证(GPL)的开源项目,用户可以自由使用、修改和分发。 2. **轻量级**:相比于其他Windows下的编译环境,如Microsoft Visual C++,MinGW的体积更小,对系统资源的...
4. `COPYING`:这是GNU通用公共许可证(GPL)的副本,说明了这个软件的许可条款,即该软件遵循GPL,允许自由使用、修改和分发。 5. `DISCLAIMER`:通常包含了法律免责声明,表明使用软件的风险自负。 6. `....
- **Windows 环境**:虽然 Windows 不是 Makefile 的传统领域,但依然可以通过 Cygwin 或 MinGW 等工具链来支持 Makefile 构建。 - **Unix/Linux 环境**:这是 Makefile 使用最为广泛的环境,尤其是 GNU Make 版本。...
在实际开发中,MingW64 可以与各种构建系统和版本控制工具结合使用,如 Makefile、CMake、Git 等,以实现自动化构建和版本管理。通过配置环境变量,用户可以在 Windows 的命令提示符或者 Git Bash 等终端模拟器中...
Eclipse本身是一个通用的集成开发环境(IDE),支持多种编程语言,但并不自带编译器。通过集成MinGW,Eclipse能够调用MinGW的编译器和链接器来处理C++项目,将源代码转化为可执行程序。这对于那些喜欢Eclipse的用户...
3. **隐含规则**:预定义的一些通用规则,如默认的编译器和链接器命令,可以简化Makefile的编写。 4. **伪目标**:如`.PHONY`,确保即使同名的物理文件存在,make也不会混淆,总是执行相应的命令。 在Windows 64位...
使用mingw64,开发者可以利用熟悉的命令行环境进行开发工作,通过编写Makefile或利用其他构建系统(如CMake)来自动化编译过程。此外,mingw64还能够与Git、SVN等版本控制系统配合,方便代码管理和团队协作。 总结...
安装和使用MinGW-w64,开发者可以编译和调试C、C++代码,并且可以使用Makefile或其他构建工具进行自动化构建。由于它兼容GCC,因此开发者可以利用GCC提供的各种优化选项和语言特性,如C++11及更高版本的特性。此外,...
- **错误处理和调试**:`nmake`提供了更详细的错误信息,有助于定位Windows环境下的问题,而`make`则更适合于通用的错误处理和调试。 在实际开发中,选择`make`还是`nmake`取决于项目需求、开发环境和个人偏好。...
Libtool 是一个通用的库管理工具,旨在解决动态库(尤其是共享库)的编译和链接问题。它隐藏了不同操作系统和编译器之间关于库文件处理的差异,提供了一致的接口。Libtool 可以帮助开发者轻松创建版本化库,支持延迟...
Eclipse作为一个通用的开源IDE,虽然最初是为Java设计的,但通过安装特定的插件,如CDT(C/C++ Development Tooling),也能成为C和C++开发的强大平台。本文将深入探讨如何利用CDT插件在Eclipse中构建C语言的编译...
1. **Makefile**: 如果你熟悉Unix/Linux系统,可以在Windows上使用MinGW的`make`工具管理多个源文件的编译。 2. **Git**: 版本控制工具对于团队协作和代码管理至关重要,可以与IDE结合使用。 3. **CMake**: 一个跨...