技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 137|回复: 2
收起左侧

【开发环境】我自己的MinGW-w64开发环境配置(带一键生成工程文件夹和vcxproj的脚本)

[复制链接]

1038

主题

2307

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
216
威望
286 点
宅币
17830 个
贡献
35614 次
宅之契约
0 份
在线时间
1706 小时
注册时间
2014-1-26
发表于 2019-5-1 10:16:17 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
我写了一个脚本。它能根据提供的名字和项目类型全自动生成一个空的工程,有个makefile,有个vcxproj,有个entry.c,有build.bat。它既可以被MSVC编译,又能被Linux编译,还能被MinGW编译。你只需要往里面填充代码,你就可以用各种方式测试运行,并且只需要修改一处,就能附加新的依赖项。非常方便。然而我用它创建了一万个想写的项目以后,面对这一大堆自己挖开的新坑,我选择睡觉。

没事给自己挖那么多坑干什么……

不过这个工具感觉还是挺有意思的(我甚至自己觉得自己写的东西有意思)因为我用BAT脚本对vcxproj和源码中的所有的“[PROJECT_NAME]”等字符串进行了查找替换。
虽然据说有个很方便的工具,名叫“FART”(Find And Replace Text)但它的缺点是主页logo十分不雅观。脱裤子放屁。说的是批命令文本替换的需求是个脱裤子放屁的需求么?

官网:http://fart-it.sourceforge.net/
而且没有https加密,小心Man in the middle。

我的查找替换的方式我是这样写的:
[Patch] 纯文本查看 复制代码
::前略

:replace_install
if exist %TARGETDIR%\%3 del %TARGETDIR%\%3
for /f "tokens=1* delims=]" %%h in ('echo "%TARGETDIR%\%3" ^| find /v /n ""') do (
	if not exist %%~dpi (
		echo Creating directory %%~dpi
		mkdir %%~dpi
	)
)
set "PROJ_UPPER=%1"
for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
	setlocal enabledelayedexpansion
	set "PROJ_UPPER=!PROJ_UPPER:%%b=%%b!"
	endlocal
)
if exist %TARGETDIR%\%2 del /q %TARGETDIR%\%2
echo Copying %3
setlocal disabledelayedexpansion
for /f "tokens=1* delims=]" %%h in ('type %2 ^| find /v /n ""') do (
	if "%%i"=="" (
		echo.>>%TARGETDIR%\%3
	) else (
		set "curline=%%i"
		setlocal enabledelayedexpansion
		set "curline=!curline:[PROJECT_NAME]=%1!"
		set "curline=!curline:[PROJECT_NAME_UPPER]=%PROJ_UPPER%!"
		echo.!curline!>>%TARGETDIR%\%3
		endlocal
	)
)
endlocal
goto :eof
这里面的一个关键的技术性要点是SetLocal EnableDelayedExpansion这句的使用过程。
这句让CMD脚本在执行时被展开环境变量,此时双感叹号括起来的环境变量名所在命令会被延迟到被执行前被展开,而不是脚本文件被加载的时候展开。而set命令允许对环境变量的内容进行匹配和替换

但是在脚本被执行的时候,for命令使用的迭代变量%i会被展开为文件的内容行,这在set命令被执行的时候,会直接变成 set xxx=明文内容 的展开方式。此时如果明文内容包含感叹号,它就会被当成“延迟展开的环境变量”的含义,然后被错误处理。为此,我的解决办法是只在最小范围使用SetLocal EnableDelayedExpansion和EndLocal的配对。

20190501082709.png

我配置好的开发环境涉及到一系列的批命令处理,但我懒得把它弄成能自动配置路径的了。所以如果要使用我的这套工具的话,需要按照说明一步步安装处理。

首先请下载我这包东西:
MinGW开发环境示例.7z (6.39 MB, 下载次数: 2)

本帖被以下淘专辑推荐:

1

主题

26

帖子

123

积分

用户组: 小·技术宅

UID
2054
精华
0
威望
2 点
宅币
93 个
贡献
0 次
宅之契约
0 份
在线时间
13 小时
注册时间
2016-11-10
发表于 2019-5-9 03:06:23 | 显示全部楼层
本帖最后由 大能猫 于 2019-5-9 03:07 编辑

我觉得海星,除了如果工程要挪位置得把脚本一起挪过去有点麻烦
配个vscode对应的launch.json和build.json应该基本可以当个vs用了
另:如果我写这玩意肯定用py,bat有点蛋疼(手动捂脸)

1038

主题

2307

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
216
威望
286 点
宅币
17830 个
贡献
35614 次
宅之契约
0 份
在线时间
1706 小时
注册时间
2014-1-26
 楼主| 发表于 昨天 12:11 | 显示全部楼层
大能猫 发表于 2019-5-9 03:06
我觉得海星,除了如果工程要挪位置得把脚本一起挪过去有点麻烦
配个vscode对应的launch.json和build.json应 ...

那还不如用炮儿壳

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-5-21 06:41 , Processed in 0.105601 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表