boost编译之 fatal error C1083: Cannot open source file: 'yyacc.c': No such file or directory
程序员文章站
2022-07-04 11:54:15
...
环境:WINDOW10 1709 + VS2017 COMMUNITY
从http://www.boost.org/users/history/version_1_65_1.html下载windows版的boost,调用bootstrap.bat编译失败。
这个错误持续好久了,网上没找到相关线索,就自己琢磨了一下,原因是cmd执行过程中当前目录不对导致。
调用关系如下:
/bootstrap.bat 调用了 /tools/build/bootstrap.bat
/tools/build/bootstrap.bat 调用了 /tools/build/src/engine/build.bat
/tools/build/src/engine/build.bat 调用了 /.../config_toolset.bat
手动调用build.bat发现输出如下:
C:\boost_1_65_1\tools\build\src\engine>build.bat
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.8
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'
###
### Using 'vc141' toolset.
###
C:\Users\tdl\source>if exist bootstrap rd /S /Q bootstrap
C:\Users\tdl\source>md bootstrap
C:\Users\tdl\source>cl /nologo /RTC1 /Zi /MTd /Fobootstrap/ /Fdbootstrap/ -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib /Febootstrap\yyacc0 yyacc.c
yyacc.c
c1: fatal error C1083: Cannot open source file: 'yyacc.c': No such file or directory
问题就暴露了,在engine文件夹下调用的bat,怎么后面报错时都是在/users/user/source下执行的?
原来/tools/build/src/engine/build.bat:162 call config_toolset.bat 会更改当前文件夹。
于是在162行后增加一行:
cd /d %~dp0
把当前目录改回/tools/build/src/engine/,即可编译出Boost.Build有网友说,想编译64位的boost库,需要从VS的x64命令行启动,而不是随便一个cmd。