本文旨在示例怎么编写windows下的makefile, 依赖于"GnuWin32",可自行网上下载。

安装方法一:

下载网址:http://gnuwin32.sourceforge.net/packages/make.htm
其他组件包:http://gnuwin32.sourceforge.net/packages.html
具体安装可参考:https://stackoverflow.com/questions/2532234/how-to-run-a-makefile-in-windows

安装方法二:

下载网址:https://sourceforge.net/projects/getgnuwin32/files/
1、安装下载好的可执行文件
2、在安装目录,新建download_config.bat,内容如:

:startset WGET=bin\wget-1.12.exe -nc --no-check-certificate -t2%WGET% http://downloads.sourceforge.net/project/gnuwin32/make/3.81/make-3.81-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/make/3.81/make-3.81-dep.zip
%WGET% http://www.aspisys.com/lua53.exe
%WGET% https://www.irontcl.com/downloads/irontcl-amd64-8.6.7.zip
%WGET% https://github.com/premake/premake-core/releases/download/v5.0.0-alpha12/premake-5.0.0-alpha12-windows.zip -Opremake-5.0.0-alpha12-windows.zip
rem %WGET% https://cmake.org/files/v3.5/cmake-3.5.2-win32-x86.zip
rem %WGET% http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip
rem %WGET% http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip%WGET% http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/coreutils-5.3.0-bin.zip
%WGET% http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/coreutils-5.3.0-dep.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-dep.zip
%WGET% https://sourceforge.net/projects/gnuwin32/files/findutils/4.2.20-2/findutils-4.2.20-2-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/findutils/4.2.20-2/findutils-4.2.20-2-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/findutils/4.2.20-2/findutils-4.2.20-2-dep.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/grep/2.5.4/grep-2.5.4-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/grep/2.5.4/grep-2.5.4-dep.zip
rem %WGET% http://downloads.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-bin.zip
rem %WGET% http://downloads.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-dep.zip
%WGET% https://eternallybored.org/misc/wget/releases/wget-1.19.4-win64.zip
%WGET% https://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/libiconv-1.9.2-1-bin.zip
%WGET% https://downloads.sourceforge.net/project/gnuwin32/sed/4.2.1/sed-4.2.1-bin.zip
%WGET% https://github.com/elisherer/cecho/archive/master.zip
%WGET% https://tartarus.org/~simon/putty-snapshots/w64/putty.zip
%WGET% http://www.codeproject.com/KB/applications/SetEnv/SetEnv_exe.zip
rem @set WGET=%WGET% https://winscp.net/download/WinSCP-5.9.4-Portable.zip
rem @set WGET=%WGET%  http://www.module.ru/mb7707/soft/libxslt-1.1.26.win32.zip %bypass_rcm_proxy% %WGET% http://downloads.sourceforge.net/project/gnuwin32/tar/1.13-1/tar-1.13-1-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/tar/1.13-1/tar-1.13-1-dep.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/gzip/1.3.12-1/gzip-1.3.12-1-bin.zip
%WGET% http://downloads.sourceforge.net/project/gnuwin32/unzip/5.51-1/unzip-5.51-1-bin.zip
%WGET% http://www.7-zip.org/a/7za920.zip

3、在安装目录,新建install_config.bat,内容如:

@set GNUWIN32_INSTALL_DIRECTORY=%1
@if "%GNUWIN32_INSTALL_DIRECTORY%"=="" set GNUWIN32_INSTALL_DIRECTORY=%cd%
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% coreutils-5.3.0-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% coreutils-5.3.0-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% diffutils-2.8.7-1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% diffutils-2.8.7-1-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% findutils-4.2.20-2-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% findutils-4.2.20-2-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% findutils-4.2.20-2-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% grep-2.5.4-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% grep-2.5.4-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% make-3.81-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% make-3.81-dep.zip
rem bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% wget-1.11.4-1-bin.zip
rem bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% wget-1.11.4-1-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY%\bin wget-1.19.4-win64.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% tar-1.13-1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% tar-1.13-1-dep.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% gzip-1.3.12-1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% unzip-5.51-1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% libiconv-1.9.2-1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% sed-4.2.1-bin.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY%\bin 7za920.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY%\bin putty.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY%\bin premake-5.0.0-alpha12-windows.zip
bin\unzip -u -o -q -d %GNUWIN32_INSTALL_DIRECTORY% irontcl-amd64-8.6.7.zip
bin\unzip -p master.zip cecho-master\cecho\bin\Release\cecho.exe  > %GNUWIN32_INSTALL_DIRECTORY%\bin\cecho.exe

4、点击download_config.bat,等包下载完后,在点击install_config.bat。

1、编写config_win.mk

 小编习惯于将编译flag统一放到一个文件中,因此新建config_win.mk,内容如:

ifeq ($(strip $(platform)), x86_32)CC    := cl.exeLD    := link.exeAR  := lib.exeRC   := rc.exeEXTRA_CFLAGS := -W3 -nologo -DWIN32EXTRA_CFLAGS += -D_CRT_SECURE_NO_WARNINGS -O2EXTRA_LDFLAGS :=EXTRA_RCFLAGS := -DWIN32
endififeq ($(strip $(platform)), x86_64)CC  := cl.exeLD    := link.exeAR  := lib.exeRC   := rc.exeEXTRA_CFLAGS := -W3 -nologo -DWIN64EXTRA_CFLAGS += -D_CRT_SECURE_NO_WARNINGS -O2EXTRA_LDFLAGS :=EXTRA_RCFLAGS := -DWIN64
endifCFLAGS := $(EXTRA_CFLAGS)
LDFLAGS := $(EXTRA_LDFLAGS)
RCFLAGS := $(EXTRA_RCFLAGS)
ARFLAGS :=

2、编写makfile_win

 小编为了和linux下的makefile区分,因此新建了一个名为Makefile_win的文件,内容如:

###windows gnu make
### 假设库的目录结构如下且同一“-”长度的属于同一目录
###  -3rdparty       #第三方库相关的库文件
###  -src               #源码路径(包含C文件及头文件)
###  -build          #build目录下有各平台相关的文件夹
###  --windows       #windows文件夹
###  ---makefile     #windows下的makefile
###  ---dll_info.rc  #资源文件
###  --objs          #obj文件输出目录
###  --out           #库输出目录include config_win.mk##库的名字在此设置
LIB_NAME := xxx##指定相关路径关系
ROOT_DIR := ../..
C_SRCS_DIR := $(ROOT_DIR)/src
INCS_DIR := $(ROOT_DIR)/src
OBJS_DIR := $(ROOT_DIR)/build/objsINC_FLAGS := -I$(ROOT_DIR)/src \-I$(ROOT_DIR)/3rdparty#设置动态库静态库生成路径
TARGET_S := $(ROOT_DIR)/build/out/lib_$(LIB_NAME).lib  #静态库
TARGET_D := $(ROOT_DIR)/build/out/$(LIB_NAME).dll      #动态库
DLL_IMPLIB := $(ROOT_DIR)/build/out/$(LIB_NAME).lib        #动态库导入库
DLL_LIBPDB := $(ROOT_DIR)/build/out/$(LIB_NAME).pdb        #动态库的PDB文件#设置资源文件路径
RC_SRCS := $(ROOT_DIR)/build/windows/dll_info.rc#设置相关源文件
C_SRCS := $(C_SRCS_DIR)/main.c#设置编译过程输出日志
OUTPUT =
##OUTPUT = >>compile.log 2>&1##目标文件
OBJS := $(patsubst %.s, %.obj, $(patsubst %.c, %.obj, $(patsubst %.cpp, %.obj, $(C_SRCS))))
OBJS_PATH := $(addprefix $(OBJS_DIR)/, $(notdir $(OBJS)))##资源文件
OBJRES := $(patsubst %.rc, %.res, $(RC_SRCS))
OBJRES_PATH := $(addprefix $(OBJS_DIR)/, $(notdir $(OBJRES)))all: $(TARGET_S) $(TARGET_D)#静态库
$(TARGET_S):$(OBJS)echo $(OBJS)$(AR) $(ARFLAGS) -out:$@ $(OBJS_PATH) $(OUTPUT)  #动态库
$(TARGET_D):$(OBJS)$(LD) $(LDFLAGS) -dll -implib:$(DLL_IMPLIB) -out:$@ $(OBJS_PATH) $(OBJRES_PATH) -debug -PDB:$(DLL_LIBPDB)%.obj:%.c$(CC) $(CFLAGS) $(INC_FLAGS) -Fo$(addprefix $(OBJS_DIR)/, $(@F)) -c $^%.obj:%.cpp$(CPP) $(CFLAGS) $(INC_FLAGS) -Fo$(addprefix $(OBJS_DIR)/, $(@F)) -c $^%.res:%.rc###SubWCRev.exe ../ ../dll_info.t ../dll_info.rc$(RC) $(RCFLAGS) -Fo $(addprefix $(OBJS_PATH)/, $(@F)) $^clean:
#where -F -R . *.obj *.log | grep -e .obj -e .log | xargs rm -rfrm -f $(OBJRES_PATH)rm -f $(OBJS_PATH)

参考网址:https://cognitivewaves.wordpress.com/makefiles-windows/
参考网址:https://stackoverflow.com/questions/2532234/how-to-run-a-makefile-in-windows
参考网址:https://opensourceforu.com/2012/06/gnu-make-in-detail-for-beginners/

附录A

A1 通过vs安装目录下的Nmake编写makefile规则

参考网址:https://bbs.csdn.net/topics/320031371
参考网址:https://www.cnblogs.com/kekec/archive/2013/04/21/3007277.html
参考网址:https://blog.csdn.net/tsaiyong_ahnselina/article/details/17554337
参考网址:https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-category?view=vs-2017

【开发工具】之windows下gnu makefile编写相关推荐

  1. Linux下的makefile编写 ——陈皓《跟我一起写Makefile》学习笔记(一)

    Linux下的makefile编写 前言 本人记笔记习惯使用OneNote,在学习LinuxC++过程中发现deepin上没有大佬开发或者移植,本人技术也不精,所以决定写博客记笔记(只是习惯问题,并没 ...

  2. 在windows下写makefile编译代码

    From: http://blog.163.com/xjming487@126/blog/static/212951352007625114849843/ 在windows下写makefile编译代码 ...

  3. 【开发工具】Windows环境下 IDEA 开发工具安装配置(无错完整)

    目录 一.开发工具下载: 二.IDE统一管理工具: 三.IDEA配置: 设置主题: 设置代码颜色: 设置编译字符编码(全部设置为UTF-8): 开启模糊匹配: 设置背景壁纸: 自动导包移包: 方法分割 ...

  4. 怎么在Windows下使用Makefile文件

     [推荐阅读] virtio-net 实现机制[一](图文并茂) 浅析linux内核网络协议栈--linux bridge 深度解析linux内核模块编译makefile 前言:如果熟悉在Linux开 ...

  5. Makefile文件详解一(怎么在Windows下使用Makefile文件)

    前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利.在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮 ...

  6. php5.5开发环境配置,windows下配置php5.5开发环境及开发扩展

    网上的教程是比较多的,但是我发现在windows下的扩展开发比较少,而且大多都是php5.3版本以前的,今天我就给大家讲解一下php扩展开发,我就拿php5.5的版本来说明一下的了 windows环境 ...

  7. php4 apache 配置,[开发环境配置]windows下php4+mysql4+apache2开发环境配置

    在网上看了好多php+mysql+apache的开发环境配置文档.但是其中不乏出现了很多的问题导致在配置开发环境的时候出现了很多的问题.这里总结出一份自己配置过程中的文档希望能给大家带来一些帮助.那么 ...

  8. 【包管理工具】Windows下的软件包管理工具Chocolatey介绍、安装软件出现错误的解决方法

    文章目录 1. Chocolatey是什么? 2. 为什么要使用Chocolatey? 3. 如何下载Chocolatey? 4. 如何使用Chocolatey? 5. 示例一:使用Chocolate ...

  9. linux与windows下开发,Linux 与 Windows下开发感受

    Linux 和 Windows环境下开发各有优点.以下Linux 下使用感受是在Ubuntu11.04,别的发行版还没试过. 至于各自的缺点,都可以通过各种方法,得到或多或少地解决.至于要花费多大的精 ...

最新文章

  1. 教你怎样快速DIY自己的博客园SKIN
  2. payment on barclays
  3. 记dropbox与git不和谐的一个问题
  4. Java开发遇到的问题及解决方案
  5. Beta阶段第1周/共2周 Scrum立会报告+燃尽图 03
  6. WIN10取消密码和休眠密码
  7. html半透明遮罩,div背景半透明 覆盖整个可视区域的遮罩层效果
  8. python实验原理_python实验报告5
  9. CF 1383/1384
  10. LaTeX学习笔记:使用bibtex引用参考文献
  11. 最短路算法详解(Dijkstra/SPFA/Floyd)
  12. 计算机英语这门课上后感1000,英语教师听课心得体会作文
  13. postgresql实现存在则更新,不存在则插入
  14. vue项目使用高德地图
  15. 求质数个数(求素数个数
  16. 10个最受欢迎的JavaScript图表库
  17. Python程序开发
  18. 2019/01/07 一位前端实习生 艰辛过程 励志 实习周记(三)——第二 三周
  19. taskkill掉带空格的windowtitle
  20. 有关lpk.dll病毒的清除方法

热门文章

  1. 2020年市场最缺什么_2020年资本市场回顾
  2. 51单片机c语言程序控制,51单片机C语言编程基础及实例.pdf
  3. Java String 常量池理解
  4. 计算机二级只有前十套简单,计算机二级Access上机十套试题详细解析(经典版).
  5. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  6. html语言中标记h1代表什么,HTML5中的标题标记(H1内部的P)中是否有段落元素是否有效?...
  7. 华为杯数学建模2020什么时候出结果_关于东北三省数学建模联赛及“华为杯”研究生数学建模竞赛的通知...
  8. python查看微信撤回消息_python如何查看微信消息撤回
  9. C# DataGridView 如何选中整行
  10. Kotlin入门(23)适配器的进阶表达