`
chenqi210
  • 浏览: 78669 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MinGW 比较通用的Makefile

阅读更多
#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/C++/C全自动编译实例

    Makefile编写实例: 1.前提是需要安装MInGw——c/c++编译器,不懂的可以私信我哈; 2.本程序是利用bat脚本直接运行...3.makefile为采用通用性规则编写,自动搜索所在目录中的代码,自动编译; 4.适应于编译C++/C代码。

    本人写的makefile for mingw + wxWidgets

    我写的makefile for mingw + wxWidgets, makefile可作为通用模板,编译C++ wxWidgets GUI 库。另外带一个小例子,用户改makefile的头部就可以完成,资源文件链接,debug, release版本编译,shared 库 非shared 库...

    mingw-w64-install.rar

    使用 MingW-w64,开发者可以利用 GDB (GNU Debugger) 进行程序调试,利用 Makefile 管理项目构建,还可以通过 Autotools 或 CMake 等工具生成跨平台的构建系统。对于初学者,MingW-w64 提供了一个轻量级的环境,可以...

    mingw32-make-3.81-20080326-2.tar.gz

    在这个上下文中,可能包含通用的Makefile模板、预定义的规则或其他配置文件,这些可以帮助开发者快速搭建构建环境或者定制特定的构建行为。此外,可能还有一些用于国际化和本地化的文件,如翻译过的错误消息或帮助...

    hiredis build-mingw64.7z

    可以使用`make mingw`命令自动生成适用于mingw64的Makefile,或者手动编辑Makefile,确保其中的编译器路径和选项正确。 4. **编译hiredis**:在命令行中输入`make`,这将启动编译过程。如果一切顺利,hiredis的动态...

    CyAPIMinGW.zip Qt MinGW编译CyAPI源码,静态库工程

    USB(通用串行总线)接口通常用于设备与计算机之间的数据传输,例如在嵌入式系统或硬件设备驱动程序中。 Qt是一个流行的开源跨平台应用开发框架,支持C++和QML。在这个项目中,Qt可能是用来创建用户界面或管理与...

    avr_makefile:基于ATMEL AVR开发的通用自制makefile

    该项目(文档)是关于基于 ATMEL AVR 的开发的通用自制 makefile。 介绍 我创建了这个 makefile,因为我对自动生成的 makefile 不满意,可以在网上找到。 所有这些都太笼统和复杂,很难理解他们在做什么,他们使用了...

    MinGW.var.sub.zip

    1. **开源和免费**:MinGW是遵循GNU通用公共许可证(GPL)的开源项目,用户可以自由使用、修改和分发。 2. **轻量级**:相比于其他Windows下的编译环境,如Microsoft Visual C++,MinGW的体积更小,对系统资源的...

    mingw64bit_v8.0.0.rar

    4. `COPYING`:这是GNU通用公共许可证(GPL)的副本,说明了这个软件的许可条款,即该软件遵循GPL,允许自由使用、修改和分发。 5. `DISCLAIMER`:通常包含了法律免责声明,表明使用软件的风险自负。 6. `....

    makefile说明手册(中文详尽版)

    - **Windows 环境**:虽然 Windows 不是 Makefile 的传统领域,但依然可以通过 Cygwin 或 MinGW 等工具链来支持 Makefile 构建。 - **Unix/Linux 环境**:这是 Makefile 使用最为广泛的环境,尤其是 GNU Make 版本。...

    4.5.0-mingw64

    在实际开发中,MingW64 可以与各种构建系统和版本控制工具结合使用,如 Makefile、CMake、Git 等,以实现自动化构建和版本管理。通过配置环境变量,用户可以在 Windows 的命令提示符或者 Git Bash 等终端模拟器中...

    MinGW-5.1.4

    Eclipse本身是一个通用的集成开发环境(IDE),支持多种编程语言,但并不自带编译器。通过集成MinGW,Eclipse能够调用MinGW的编译器和链接器来处理C++项目,将源代码转化为可执行程序。这对于那些喜欢Eclipse的用户...

    windows 64位的 make 工具

    3. **隐含规则**:预定义的一些通用规则,如默认的编译器和链接器命令,可以简化Makefile的编写。 4. **伪目标**:如`.PHONY`,确保即使同名的物理文件存在,make也不会混淆,总是执行相应的命令。 在Windows 64位...

    mingw64-2023最新版

    使用mingw64,开发者可以利用熟悉的命令行环境进行开发工作,通过编写Makefile或利用其他构建系统(如CMake)来自动化编译过程。此外,mingw64还能够与Git、SVN等版本控制系统配合,方便代码管理和团队协作。 总结...

    MinGw8.1.0 x86_64-8.1.0-release-posix-seh-rt_v6-rev0_2.zip

    安装和使用MinGW-w64,开发者可以编译和调试C、C++代码,并且可以使用Makefile或其他构建工具进行自动化构建。由于它兼容GCC,因此开发者可以利用GCC提供的各种优化选项和语言特性,如C++11及更高版本的特性。此外,...

    make和nmake工具

    - **错误处理和调试**:`nmake`提供了更详细的错误信息,有助于定位Windows环境下的问题,而`make`则更适合于通用的错误处理和调试。 在实际开发中,选择`make`还是`nmake`取决于项目需求、开发环境和个人偏好。...

    GNU autoconf, automake, and libtool

    Libtool 是一个通用的库管理工具,旨在解决动态库(尤其是共享库)的编译和链接问题。它隐藏了不同操作系统和编译器之间关于库文件处理的差异,提供了一致的接口。Libtool 可以帮助开发者轻松创建版本化库,支持延迟...

    cdt插件 eclipse的c语言编译环境

    Eclipse作为一个通用的开源IDE,虽然最初是为Java设计的,但通过安装特定的插件,如CDT(C/C++ Development Tooling),也能成为C和C++开发的强大平台。本文将深入探讨如何利用CDT插件在Eclipse中构建C语言的编译...

    Window 10 C++开发环境

    1. **Makefile**: 如果你熟悉Unix/Linux系统,可以在Windows上使用MinGW的`make`工具管理多个源文件的编译。 2. **Git**: 版本控制工具对于团队协作和代码管理至关重要,可以与IDE结合使用。 3. **CMake**: 一个跨...

Global site tag (gtag.js) - Google Analytics