MinGW-GCC不支持通配符,make大法好

之前在公司做某个自动测试工具的时候,考虑到程序的灵活性,用了LUA作流程控制(嗯……结果到最后还被技术总监批评了,说工具本来很简单的被搞得复杂了,开始有各种奇怪的依赖了,有欠考虑)。这就需要编译LUA,但是当时公司的VisualStudio可能是配置不正确或者其他什么原因,VS的命令提示符打不开,我也懒得去修,最后用了GCC。装的是TDM-GCC 64位版。

然后呢就遇上了一个比较麻烦的问题:这个版本的GCC不支持通配符。平时我自己用的都是32位版本,新买的电脑虽然装的是64位系统但是一个是没买多久、一个是还没开发过64位程序,所以没搞过64位编译器。现在要编译出来DLL可能要给64位的C#程序调用,所以需要64位的编译器。然后它不能 gcc -shared -olua.dll *.c:出错信息说找不到叫做*.c的文件。以前一直用的32位编译器,对于这样的命令行都能正常运行的……

虽然当场用了比较土的方法解决,就是先dir *.c /b > xxx.txt 然后用notepad++打开这个txt把所有换行替换为回车然后复制出来粘贴到命令行上,但是考虑到以后可能还有类似的情况,每次都用这样的办法实在有些麻烦,所以还是要想想应该怎么解决的。

最初我想到的办法是装一个Windows下的Unix-like shell,比如MSYS或者CygWin都能在*.c这样的东西被送入程序命令行之前给你展开。首先考虑是MSYS,去下载的时候发现只找到了在线安装包,或者很老版本的离线安装包。新版本都没有离线安装包了。想到要在线安装,并且安装的时候都不知道网络会是什么样子的速度或者甚至可能没有网络连接,就一下子热情大减,很是烦躁。

在某个程序员交流群里提出了这样的问题,没想到很快一个叫做MiliMeow的群友就给出了解决方法:让make工具去展开。我检查了一下TDM-GCC 64位版的安装目录,在bin下面有个叫做mingw32-make的东西,目测能提供一定的帮助。于是就搞了这样一个make文件

SRCS = $(wildcard *.c)
all :
	gcc -shared -olua.dll $(SRCS)

(注意:缩进用的是tab,四个空格看起来是不行的)
运行一下mingw32-make,没想到真的就可以了。虽然绕了一步,但是最重要的是,这个mingw32-make是TDM-GCC安装包里面自带的工具,不用临时手忙脚乱再去找其他什么东西了。我自己虽然是写过make文件,但是这种通配符啥的还是没用过,所以……

利用make工具来展开通配符这一点实在是很聪明。这能力的差距果然非常明显呢……不好好提高一下不行了orz

发表评论