我正在尝试使用Windows下的scons + MSVC编译器编译一个简单的程序。程序源只是简单的“Hello world”。
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!\n";
return 0;
}
SConstruct非常简单:
Program("hw.cc")
当我在源目录中运行scons
时,我得到了
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
cl /Fohw.obj /c hw.cc /TP /nologo
scons: *** [hw.obj] Error 123
scons: building terminated because of errors.
在控制台和弹出消息中出现0xc000007b错误。
where
命令的结果:
where cl
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx86\x86\cl.exe
where scons
C:\Python35-32\Scripts\scons.bat
我不知道什么是错的。
UPD 2
答案 0 :(得分:0)
在对cl
和scons
进行了一些实验之后,我终于弄清楚了哪里出了问题以及如何解决。
首先,cl
应该可以从命令行使用。如果在控制台中输入命令cl
后出现诸如command not found
之类的错误,则应将cl.exe
的路径添加到PATH
系统变量。就我而言
PATH=<rubbish>;C:\Microsoft\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x86;
此后,您应该设置变量INCLUDE
和LIB
来告诉编译器和链接器在哪里可以找到包含文件和库。这部分有点棘手,因为令我惊讶的是,cl
在没有Windows Kits 10的情况下不会编译任何东西(无论它是什么)。因此,您应该相应地指定其包含和库。就我而言
INCLUDE=C:\Microsoft\VC\Tools\MSVC\14.14.26428\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt
LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\ucrt\x86;C:\Microsoft\VC\Tools\MSVC\14.14.26428\lib\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\um\x86
正确设置这些变量后,hw.cc
应该可以正常编译。
也许,这也应该为scons
做些技巧,但是要确保百分之一百正确地工作,SConstruct
应该修改为类似的内容
import os
env = Environment(ENV = os.environ)
flags = ["/EHsc"] # Flags are completely optional
env.Program("hw.cc", CXXFLAGS=flags)
通过所有这些步骤,所有内容都可以正常编译。