由于对makefile文件不熟悉,自己边学习边摸索,花了将近两个小时使用MinGW完成了Praat的编译,看着自己编译出来的Praat还是很幸福的。下面分享下编译的过程。
MinGW使用的是CodeBlocks10.05的捆绑包,版本号为3.81。Praat下载的为5.3.14版本。Praat官网有编译的简单介绍,首先是要下载GDI+库。为方便起见,我把GDI头文件和库文件分别放在MinGW的include和lib目录中。然后将praat源文件makefiles目录下的makefile.defs.mingw32拷贝到源文件的根目录,并且改名为makefile.defs,此时makefile.defs和makefile文件在同一个目录,各模块的makefile文件会包含makefile.defs。
为方便编译,我建立了一个批处理文件,内容如下:
set path=C:\Program Files (x86)\CodeBlocks\MinGW\bin;
mingw32-make -v
d:
cd d:\praat5314
mingw32-make clean
pause
mingw32-make
pause
第一行为MinGW的安装目录,d:\praat5314为praat源码目录。如果现在就运行该批处理文件会出现错误,提示“找不到指定的系统文件”。这是因为praat的makefile.defs.mingw32文件在路径设置上与MinGW不匹配,导致无法正常调用gcc等命令文件。
打开我们拷贝并且改名的makefile.defs进行编辑,由于批处理文件设置了路径变量,所以gcc等命令可以直接调用,将makefile.defs文件中的/mingw32/bin/gcc改为gcc,并相应的调整包含路径/mingw32/include为/../include,调整库路径/mingw32/lib为/../lib,修订后的makefile.defs文件内容如下:
# File: makefile.defs.mingw32
# System: MinGW
# Paul Boersma, 14 September 2011
CC = gcc -std=gnu99 -isystem /../include
CXX = g++ -isystem /../include/ -isystem /../include -Wshadow
#CXX = g++ -isystem /../include/ -isystem /../include
CFLAGS = -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0500 -DUNICODE -DDONT_INCLUDE_QUICKTIME -Dmain=wingwmain -O2
#CFLAGS = -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0500 -DUNICODE -Dmain=wingwmain -O2
CXXFLAGS = $(CFLAGS)
LINK = g++
EXECUTABLE = Praat.exe
LIBS = -L/../lib -lwinmm -lwsock32 -lcomctl32 -lole32 -lgdi32 -lgdiplus -lcomdlg32 -static-libgcc -static-libstdc++ -mwindows
#LIBS = -L/../lib -lwinmm -lwsock32 -lcomctl32 -lole32 -lgdi32 -lgdiplus -lcomdlg32 ../lib/QTMLClient.lib -static-libgcc -static-libstdc++ -mwindows
AR = /ar
RANLIB = ranlib
WINDRES = windres
ICON = praat_win.o
MAIN_ICON = main/praat_win.o
保存修改后,执行批处理文件有了很大的进展,但依然会出现错误。这是因为各模块的makefile文件调用了linux命令touch和rm。手动遍历各个子目录,编辑makefile文件,将倒数第二节中的touch命令调用行删除,将rm命令简单的改为del命令,分别保存。
做完这些之后,再次运行批处理文件,等待一段时间,praat.exe就出来了,用着自己的praat还是感觉很好的:)