转载自 :http://blog.csdn.net/tdl1001/article/details/78726950

使用 VS2017 的命令行,就通过了,生成了 bjam.exe

fatal error C1083: 无法打开源文件: “yyacc.c”: No such file or directory

环境: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发现输出如下:

[plain] view plain copy
  1. C:\boost_1_65_1\tools\build\src\engine>build.bat  
  2. **********************************************************************  
  3. ** Visual Studio 2017 Developer Command Prompt v15.0.26730.8  
  4. ** Copyright (c) 2017 Microsoft Corporation  
  5. **********************************************************************  
  6. [vcvarsall.bat] Environment initialized for: 'x86'  
  7. ###  
  8. ### Using 'vc141' toolset.  
  9. ###  
  10.   
  11. C:\Users\tdl\source>if exist bootstrap rd /S /Q bootstrap  
  12.   
  13. C:\Users\tdl\source>md bootstrap  
  14.   
  15. C:\Users\tdl\source>cl /nologo /RTC1 /Zi /MTd /Fobootstrap/ /Fdbootstrap/ -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib /Febootstrap\yyacc0 yyacc.c  
  16. yyacc.c  
  17. 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行后增加一行:

[plain] view plain copy
  1. cd /d %~dp0  
把当前目录改回/tools/build/src/engine/,即可编译出Boost.Build


有网友说,想编译64位的boost库,需要从VS的x64命令行启动,而不是随便一个cmd。

相关文章: