欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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。