QGIS2.3.0官方推荐采用VS2008进行编译,GUI使用Qt4.7.1-VS2008,脚本使用Python2.7.4。QGIS 插件包括CPP插件和Python插件两种,使用Qt4加载CPP插件,使用Python2加载Python插件,有些Python插件(例如processing插件)依赖于PyQt4,PyQt4依赖于Qt4-VS2008。QGIS的有些依赖库(例如Qwt5)依赖于Qt4-VS2008。
1、安装CMake 2.8
(1)下载地址:http://www.cmake.org/
(2)安装路径:自定义,例如:C:\GNU\CMake2.8
2、安装GNUWin32 flex 2.5和bison 2.4
(1)下载地址:http://gnuwin32.sourceforge.net/packages/flex.htm和.../bison.htm
(2)安装路径:自定义,例如:C:\GNU\GnuWin32
说明:Flex/Bison常用安装程序有两种:GnuWin32 Flex 2.5/Bison 2.4和Win flex-bison 2.5 (http://sourceforge.net/projects/winflexbison/),推荐安装GnuWin32Flex 2.5/Bison 2.4。
3、下载QGIS 2.3源代码
(1)下载地址:https://github.com/qgis/QGIS
(2)解压路径:自定义,例如:C:\qgis230-source\QGIS-master
说明:源代码压缩包中提供了安装说明(QGIS-master\doc\INSTALL.html)。
4、通过OSGeo4W Installer 32bit安装QGIS 2.3依赖库
(1)下载地址:https://trac.osgeo.org/osgeo4w/
(2)运行OSGeo4W,选择Advanced Install -> Install from Internet or Install from LocalDirectory –> Root Directory (Default: C:\OSGeo4W) -> Select Packages:qgis-full-dev。
(3)缺省QGIS 2.3开发包(qgis-full-dev)未安装Qwt5开发包(Qwt5-devel-qt4)和Spatialindex开发包(libspatialindex-devel),需要单独安装这两个开发包。
说明:QGIS依赖库头文件位于C:\OSGeo4W\include路径下,静态库文件位于C:\OSGeo4W\lib路径下,qmake.exe等工具位于C:\OSGeo4W\bin路径下,外部可执行程序包位于C:\OSGeo4W\apps路径下。
5、设置环境变量
(1)打开系统命令提示符,在控制台模式下设置环境变量中
(2)调用OSGeo4W\bin\o4w_env.bat批处理文件,将自动递归调用OSGeo4W \etc\ini\*.bat批处理文件,设置OSGeo4W运行环境变量,例如:
call "C:\OSGeo4W\bin\o4w_env.bat"
其中用于CMake生成VS解决方案的变量包括:
OSGEO4W_ROOT=C:\OSGeo4W
PATH=%OSGEO4W_ROOT%\bin;%PATH%
PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
PATH=%OSGEO4W_ROOT%\apps\Python27\Scripts;%PATH%
说明:CMake使用PYTHONHOME查找SIP包所在路径。
(3)在环境变量INCLUDE和LIB中添加OSGeo4W依赖库头文件和静态库文件所在路径,或者在环境变量PATH中添加依赖库头文件和库文件所在路径。例如:
set INCLUDE=%OSGEO4W_ROOT%\include;%INCLUDE%
set LIB=%OSGEO4W_ROOT%\lib;%LIB%
(4)定义GRASS_PREFIX,例如:
setGRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.3
注意:在GRASS_PREFIX路径中不要使用’\’代替’/’,否则CMake将产生错误。
(5)在环境变量PATH中添加添加GNUWin32 Flex/Bison可执行文件所在路径,例如;
set C:\GNU\GnuWin32\bin
(6)在环境变量PATH中添加CMake可执行文件所在路径,例如:
C:\GNU\CMake2.8\bin
(7)调用VS2008的\VC\vcvarsall.bat批处理文件,将自动递归调用VC\bin\vcvars32.bat和%VS90COMNTOOLS%vsvars32.bat批处理文件,例如:
call "C:\Program Files\MicrosoftVisual Studio 9.0\VC\vcvarsall.bat" x86 或
call "C:\Program Files (x86)\MicrosoftVisual Studio 9.0\VC\vcvarsall.bat" x86
其中用于CMake生成VS解决方案的变量包括:
VS90COMNTOOLS =C:\Program Files\MicrosoftVisual Studio 9.0\Common7\Tools\或
VS90COMNTOOLS =C:\Program Files (x86)\MicrosoftVisual Studio 9.0\Common7\Tools\
LIB=”C:\Program Files\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”或
LIB=”C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”
说明:CMake需要在环境变量PATH或LIB中查找Microsoft SDKs 的SetupAPI.Lib,找到后定义SETUPAPI_LIBRARY变量。
特别注意:系统环境变量PATH中路径之间分号的前后不要加空格,否则CMake解析路径时出现错误。
6、复制GNUWin32 Flex/Bison的unistd.h头文件
QGIS编译时需要GNUWin32Flex/Bison的unistd.h头文件,将GnuWin32\include\unistd.h头文件复制到VC\include路径下,例如:C:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include或C:\Program Files(x86) \Microsoft Visual Studio 9.0\VC\include。
说明:在环境变量INCLUDE或PATH中添加GNUWin32 Flex/Bison的unistd.h头文件所在路径,VS2008编译时仍然找不到unistd.h,因此必须复制该文件。
7、生成QGIS 2.3.0解决方案
(1)开cmake-gui应用程序;
(2)在where is the source code中输入源代码根路径,例如:D:/dev_qgis/qgis230-source/QGIS-master;
(3)在where to build the binaries中输入编译根路径,例如:D:/dev_qgis/qgis-source230/build;
(4)选中Grouped复选框,按分组显示列表,使用默认选项。
(5)点击Configure按钮,选择Visual Studio 10,应该顺利通过;
(6)点击Generate按钮,生成qgis2.3.0.sln解决方案。
说明:可以采用基本编译选项,打开With组,仅选中WITH_DESKTOP, WITH_INTERNAL_HTTPLIB, WITH_INTERNAL_QEXTSERIALPORT,WITH_ INTERNAL_QWTPOLAR。
8、编译QGIS 2.3.0解决方案
(1)通过VS2008打开qgis2.3.0.sln解决方案
(2)将解决方案配置由Debug改为RelWithDebInfo (Release with Debug Info)
(3)编译默认解决方案
说明:由于OSGeo4W仅提供了release依赖库,RelWithDebInfo配置使用release依赖库,还保留了调试信息,可以调试QGIS,推荐采用该配置。
问题1:CMake生成QGIS解决方案时,找不到flex
分析原因:在QGIS-master\CMakeLists.txt中通过 INCLUDE(Flex)调用QGIS-master\cmake\ Flex.cmake 模块,在 Flex.cmake 中通过FIND_PROGRAM命令查找flex.exe可执行文件所在目录:
FIND_PROGRAM(FLEX_EXECUTABLE
NAMES flex.exe
PATHS$ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin)
由于未在环境变量PATH指定flex所在路径,所以找不到flex。
解决方法:在环境变量PATH添加flex所在路径,例如:
set PATH=C:\GNU\GnuWin32\bin;%PATH%
问题2:CMake生成QGIS解决方案时,找不到bison
分析原因:在QGIS-master\CMakeLists.txt中,过 INCLUDE(Bison)调用QGIS-master\cmake\ Bison.cmake模块,在Bison.cmake中通过FIND_PROGRAM命令查找bison.exe可执行文件所在目录:
FIND_PROGRAM(BISON_EXECUTABLE PATHS
NAMES bison.exe
PATHS $ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin
由于未在环境变量PATH指定bison所在路径,所以找不到bison。
解决方法:在环境变量PATH添加bison所在路径,例如:
set PATH=C:\GNU\GnuWin32\bin;%PATH%
问题3:CMake生成QGIS解决方案时,未定义GEOS_INCLUDE_DIR和GEOS_LIBRARY
分析原因:在QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(GEOS)调用QGIS-master \cmake\ FindGEOS.cmake模块,在FindGEOS.cmake中通过FIND_PATH命令查找GEOS头文件,通过和FIND_LIBRARY命令查找GEOS库文件:
IF(MSVC)
FIND_PATH(GEOS_INCLUDE_DIR geos_c.h $ENV{LIB_DIR}/include $ENV{INCLUDE})
FIND_LIBRARY(GEOS_LIBRARY NAMES geos geos_c_i geos_c PATHS
"$ENV{LIB_DIR}/lib"
$ENV{LIB})
ENDIF (MSVC)
遍历CMake缺省路径和PATHS指定路径,并将结果保存到GEOS_INCLUDE_DIR和GEOS_LIBRARY中。
由于未在环境变量PATH中添加依赖库头文件和库文件所在路径,导致找不到GEOS库。
解决方法1:在环境变量INCLUDE和LIB中添加OSGeo4W依赖库所在路径,例如:
set OSGEO4W_ROOT=C:\OSGeo4W
setINCLUDE=%OSGEO4W_ROOT%\include;%INCLUDE%
set LIB=%OSGEO4W_ROOT%\lib;%LIB%
解决方法2:在环境变量PATH中添加OSGeo4W依赖库所在路径,例如:
set PATH=%OSGEO4W_ROOT%\include;%PATH%
set PATH=%OSGEO4W_ROOT%\lib;%PATH%
问题4:CMake生成QGIS解决方案时,找不到PYTHON_EXECUTABLE
分析原因:在QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(PythonInterpREQUIRED)调用CMake的FindPythonInterp.cmake模块,在FindPythonInterp.cmake中通过find_program命令查找Python可执行文件:
find_program(PYTHON_EXECUTABLE NAMES${_Python_NAMES})
解决方法:在环境变量PATH添加python.exe所在路径,例如:
set PATH=%OSGEO4W_ROOT%\bin;%PATH%
注意:当系统中安装了两个版本Python时,假设由OSGeo4W安装了Python2.7.4,由其他程序安装了Python 2.7.2,若环境变量PATH中设置了Python 2.7.2安装路径,可能导致异常问题。建议:从环境变量PATH中删除其他版本Python所在路径,例如:C:\Python27\; C:\Python27\Scripts。
问题5:CMake生成QGIS解决方案时,找不到SIP
分析原因:在QGIS-master\CMakeLists.txt中,如果定义了WITH_BINDINGS,将通过FIND_PACKAGE(SIPREQUIRED)命令调用QGIS-master\cmake\ FindSIP.cmake模块,该模块通过EXECUTE_PROCESS(COMMAND${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config)命令调用python.exe来运行QGIS-master\cmake\FindSIP.py,在FindSIP.py中需要导入sipconfig包,查找sipconfig包时需要使用PYTHONHOME变量,由于未定义该变量而导致找不到SIP。
解决方法:定义环境变量PYTHONHOME,例如:
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
注意:不需要在环境变量PATH中添加Python安装路径。
问题6:CMake生成QGIS解决方案时,未定义QWT_INCLUDE_DIR和QWT_LIBRARY
分析原因:QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(QwtREQUIRED) 加载并运行QGIS-master\cmake\ FindQwt.cmake模块,在FindQwt.cmake中通过FIND_PATH命令查找Qwt头文件,通过FIND_LIBRARY命令查找库文件:
FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS
/usr/include
/usr/local/include
"$ENV{LIB_DIR}/include"
"$ENV{INCLUDE}"
PATH_SUFFIXES qwt-qt4 qwt qwt5 qwt6)
FIND_LIBRARY(QWT_LIBRARY NAMES qwt qwt5 qwt6 qwt-qt4 qwt5-qt4 PATHS
/usr/lib
/usr/local/lib
"$ENV{LIB_DIR}/lib"
"$ENV{LIB}" )
遍历CMake缺省路径和PATHS指定路径,并将结果保存到QWT_INCLUDE_DIR和QWT_LIBRARY中。
解决方法1:确保安装了Qwt开发包。
解决方法2:在环境变量INCLUDE和LIB中添加Qwt的头文件和库文件所在路径。
问题7:CMake生成QGIS解决方案时,未定义SPATIALINDEX_INCLUDE_DIR和SPATIALINDEX_LIBRARY
分析原因:QGIS-master\src\core\CMakeLists.txt中通过FIND_PACKAGE(SpatialindexREQUIRED)调用FindSpatialindex.cmake模块,在FindSpatialindex.cmake中通过FIND_LIBRARY查找Spatialindex库文件:
FIND_LIBRARY(SPATIALINDEX_LIBRARY NAMES spatialindex_i spatialindexPATHS
/usr/lib
/usr/local/lib
"$ENV{LIB_DIR}/lib"
"$ENV{LIB}/lib"
"$ENV{OSGEO4W_ROOT}/lib")
编译64位QGIS时,使用了spatialindex-64.lib库,因此找不到spatialindex-64.lib库。
解决方法1:确保安装了Spatialindex开发包。
解决方法2:在环境变量INCLUDE和LIB中添加Spatialindex的头文件和库文件所在路径。
解决方法3:在CMake_gui中手工添加spatialindex-64.lib所在路径。
问题8:CMake生成QGIS解决方案时,找不到Qt4
分析原因:在QGIS-master\src\core\CMakeLists.txt中通过FIND_PACKAGE(Qt4${QT_MIN_VERSION} REQUIRED)调用CMake安装路径\share\cmake-2.8\Modules\FindQt.cmake模块,查找Qt 4.7.x以上版本,由于未在环境变量PATH中设置C:\GNU\OSGeo4W\bin路径,找不到qmake.exe,最终导致找不到Qt4。
解决方法:在环境变量PATH中添加OSGeo4W的可执行程序所在路径(bin)。
问题9:CMake生成QGIS解决方案时,未定义SETUPAPI_LIBRARY
分析原因:在QGIS-master\src\core\CMakeLists.txt中通过FIND_LIBRARY(SETUPAPI_LIBRARYNAMES setupapi PATHS $ENV{LIB})查找setupapi库文件。由于未在环境变量PATH中添加Microsoft SDKs库文件所在路径,导致找不到SetupAPI.Lib。
解决方法1:在环境变量LIB或PATH中添加SetupAPI.Lib所在路径,例如:
set PATH= “C:\Program Files\MicrosoftSDKs\Windows\v7.0A\Lib;%PATH%” 或
set PATH= “C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Lib;%PATH%” 或
解决方法2:调用VC变量定义批处理文件,例如:
call "C:\Program Files\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat" x86 或
call "C:\Program Files (x86)\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat" x86
问题10:CMake生成QGIS解决方案时,定义了GRASS_PREFIX,FindGRASS.cmake错误
分析原因:QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(GRASS)加载并运行QGIS-master\cmake\ FindGRASS.cmake模块,在FindGRASS.cmake中通过FIND_PATH命令查找GRASS头文件:
SET (GRASS_PATHS ${GRASS_PREFIX}/usr/lib/grass /usr/lib64/grass64 /usr/lib/grass64 c:/msys/local /opt/grass$ENV{GRASS_PREFIX})
IF (WITH_GRASS)
FOREACH (G_PREFIX ${GRASS_PATHS})
IF (NOT GRASS_FOUND)
CHECK_GRASS(${G_PREFIX})
ENDIF (NOT GRASS_FOUND)
ENDFOREACH (G_PREFIX)
ENDIF (WITH_GRASS)
MACRO (CHECK_GRASS G_PREFIX)
FIND_PATH (GRASS_INCLUDE_DIR grass/version.h ${G_PREFIX}/include)
…
ENDMACRO (CHECK_GRASS)
遍历GRASS_PATHS指定路径,并将结果保存到GRASS_INCLUDE_DIR中。
由于GRASS_PREFIX路径中包含’/’,导致CMake出现错误。
解决方法1:确保安装了GRASS开发包。
解决方法2:将GRASS_PREFIX中’\’手工替换为‘/’。
问题11:CMake生成QGIS解决方案时,安装了Win flex-bison,找不到flex路径
分析原因:在QGIS-master\CMakeLists.txt中通过 INCLUDE(Flex)调用QGIS-master\cmake\ Flex.cmake 模块,在 Flex.cmake 中通过FIND_PROGRAM命令查找flex.exe可执行文件所在目录:
FIND_PROGRAM(FLEX_EXECUTABLE
NAMES flex.exe
PATHS$ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin)
由于win_flex_bison-2.5.1使用了win_flex.exe文件名,导致无法找到flex.exe所在路径。
解决方法:建议在CMake_gui中手工添加win_flex.exe所在路径。
问题12:CMake生成QGIS解决方案时,安装了Win flex-bison,找不到bison路径
分析原因:在QGIS-master\CMakeLists.txt中,过 INCLUDE(Bison)调用QGIS-master\cmake\ Bison.cmake模块,在Bison.cmake中通过FIND_PROGRAM命令查找bison.exe可执行文件所在目录:
FIND_PROGRAM(BISON_EXECUTABLE PATHS
NAMES bison.exe
PATHS $ENV{LIB_DIR}/binc:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin
由于win_flex_bison-2.5.1使用了win_bison.exe文件名,导致无法找到bison.exe所在路径。
解决方法:建议在CMake_gui中手工添加win_flex.exe所在路径。
问题13:编译QGIS时,找不到unistd.h
分析原因:在QGIS-master\cmake\Flex.cmake 模块中定义宏MACRO(ADD_FLEX_FILES _sources ),在QGIS-master\src\core\CMakeLists.txt中通过宏ADD_FLEX_FILES(QGIS_CORE_SRCSqgsexpressionlexer.ll)生成build\src\core\flex_qgsexpressionlexer.cpp文件,在flex_qgsexpressionlexer.cpp中调用#include<unistd.h>头文件,Windows系统不自带该文件。
解决方法:将unistd.h复制到VS\include路径下。
问题14:编译QGIS时,errorC2487: “FieldIndexRole”: dll 接口类成员可能不与 dll接口一起声明
分析原因:在qgis-master\src\gui\qgsfieldmodel.h中定义了类_declspec(dllexport)QgsFieldModel,类中定义静态成员变量FieldNameRole和FieldIndexRole在一行中导致错误,这是Micorsoft产品的一个缺陷 (http://support.microsoft.com/kb/127900/zh-cn):
class GUI_EXPORT QgsFieldModel : publicQAbstractItemModel
{ ……
static const int FieldNameRole, FieldIndexRole;
…… }
解决方法:将每个静态变量声明移到自己的行中,即:
class GUI_EXPORT QgsFieldModel : publicQAbstractItemModel
{ ……
static const intFieldNameRole;
static const int FieldIndexRole;
…… }
问题15:编译QGIS时,errorC3861: “finite”: 找不到标识符
分析原因:在QGIS-master\src\core\pal\feature.cpp中调用了Linux /Unix函数finite(),而Windows中类似函数为_finite()。
assert(finite( lx ) && finite( ly ) );
finite()函数语法:intfinite(double value);
如果value既不是无穷大/无穷小,也不是非数字,则返回非零值,否则返回0。
解决方法:修改为Windows中_finite()函数。
问题16:编译qgispython工程DEBUG版本时,出现 errorLNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(qgispython.obj和qgspythonutilsimpl.obj)
分析原因:在QGIS-master\src\python\qgspythonutilsimpl.cpp文件中,取消了_DEBUG定义:
#ifdef _MSC_VER
#ifdef _DEBUG
#undef _DEBUG
#endif
#endif
在QGIS-master\src\python\qgispython.cpp文件中,未取消_DEBUG定义,因此,导致两个文件的DEBUG版本不匹配。
解决方法1:在qgispython.cpp文件中,取消_DEBUG定义。
解决方法2:在qgspythonutilsimpl.cpp文件中,不取消_DEBUG定义,可能会引起其它问题。
问题17:编译qgispython工程DEBUG版本时,出现error LNK1104: 无法打开文件“python27_d.lib”
分析原因:qgspython依赖于python 2.7的库文件,在pyconfig.h文件中定义DEBUG链编时使用python27.lib库,RELEASE链编时使用python27_d.lib库。
# if defined(_MSC_VER)
/* So MSVC users need not specify the .lib file in
theirMakefile (other compilers are generally
takencare of by distutils.) */
# ifdef _DEBUG
# pragma comment(lib,"python27_d.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
# endif /* _MSC_VER */
解决方法1:在qgspython工程中取消_DEBUG定义。
解决方法2:修改pyconfig.h文件,将_DEBUG中链接库改为python27.lib,可能会引起其它问题。
说明:编译python_module_qgis_analysis, python_module_qgis_core, python_module_qgis_gui,python_module_qgis_networkanalysis工程时,出现error LNK1104: 无法打开文件“python27_d.lib”,解决方法同上。
问题18:调试QGIS时,通过qgspython.dll加载python27.dll失败
分析原因:通过Depends工具查看QGIS的依赖库(或者在调试状态下查看自动加载的依赖库),发现加载了系统路径下的Python动态库(例如C:\Windows\System32\python27.dll,版本2.7.2),未加载开发环境中的Python动态库(例如C:\GNU\OSGeo4W\bin\python27.dll,版本2.7.4),而两个Python动态库的版本不一致,导致加载失败。
解决方法1:将系统路径下Python动态库移到其他路径下。
解决方法2:使用开发环境中Python动态库覆盖系统路径下Python动态库。
问题19:调试QGIS时,加载qgis.core模块失败:无法载入PyQGIS,Python支持将被禁用
分析原因:QGIS未生成qgis.core模块
解决方法:QGIS通过python_module_qgis_core工程生成qgis.core模块,例如D:\dev_qgis\qgis-source230\build\output\python\qgis\core.pyd。
问题20:在Python中加载qgis.core模块出现错误:ImportError: No module named qgis.core
分析原因:qgis.core模块不在Python搜索路径中,qgis.core模块是…\qgis\core.pyd文件。
解决方法1:定义PYTHONPATH变量保存qgis.core模块所在路径,例如:D:\dev_qgis\qgis-source230\build\output\python
注意:必须定义PYTHONPATH变量,不需要在PATH变量中添加qgis.core模块所在路径。
问题21:在Python中加载qgis.core模块出现错误:ImpotError: DLL load failed
分析原因:通过Depends工具查看…\qgis\core.pyd的依赖库,发现需要调用qgis_core.dll动态库。
解决方法:在系统PATH变量中添加qgis_core.dll动态库所在路径例如:D:\dev_qgis\qgis-source230\build\output\bin\RelWithDebInfo
注意:必须在PATH变量中添加,不需要在PYTHONPATH变量中添加qgis_core.dll动态库所在路径。
编译警告:C4702 无法访问的代码
使用Notepad++ 6.5 打开引起警告的文件,通过格式菜单,将UTF-8无BOM格式编码转为UTF-8格式编码,重新编译。
注意:安装路径最好不要有空格或中文。
说明1:Flex是语法扫描器,用于解析文本生成代码;Bison是语法分析器,用于把上下文无关文法描述转换为可做语法分析的C或C++程序。Flex扫描器经常使用Bison定义的语法,Flex生成代码时使用Bison生成的头文件。
说明2:CMake 2.8中包含FindFLEX.cmake模块和FindBISON.cmake模块(位于C:\GNU\CMake2.8\share\cmake-2.8\Modules),用于查找Flex可执行程序 (flex.exe或win_flex.exe)和Bison可执行程序(bison.exe或win_bison.exe),但是QGIS未使用这两个模块,而是自定义Flex.cmake 模块和Bison.cmake模块(位于\QGIS-master\cmake)来查找flex.exe和bison.exe。
说明3:MS2010中MFC静态编译设置:项目属性 -> 配置属性 –> 常规–> MFC的使用 设置为在静态库中使用MFC;运行库编译设置:项目属性 -> 配置属性 -> C/C++-> 代码生成 -> 运行库设置为多线程(/MT)或多线程调试(/MTd)。