当我尝试使用 cl.exe 作为编译器时,Makefile returns 出错
Makefile returns an error when I try to use cl.exe as the compiler
我已经在我的 makefile 中激活了 vcvarsall.bat
,但是当我尝试编译我的程序时仍然出现这个错误:
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.11.1
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
process_begin: CreateProcess(NULL, cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [build] Error 2
[Process exited 2]
生成文件:
all: build run
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
@cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
run:
@bin\main.exe
当我手动输入命令时,代码确实被编译并且我生成了可以运行的可执行文件,但是我也从编译器收到了这些奇怪的警告消息:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MS
VC.29.30133\include\ostream(746): warning C4530: C++ exception handler
used, but unwind semantics are not enabled. Specify /EHsc
main.cpp(4): note: see reference to function template instantiation 'std:
:basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_t
raits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char
*)' being compiled
Microsoft (R) Incremental Linker Version 14.29.30133.0
Copyright (C) Microsoft Corporation. All rights reserved.
我正在使用 Windows 10.
在 makefile 配方中,每个命令行都是 运行 在它自己的 shell 中。 Windows中vcvarsall.bat
文件设置了一堆环境变量,环境变量只对当前shell有效;当 shell 退出时,它们就消失了。当你 运行:
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
@cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
首先 make 启动 shell 和 运行s call
在其中设置 Visual Studio 环境,然后 shell 退出和所有这些变量设置丢失。然后 make 开始另一个 shell 和 运行s cl
但是它想要的环境设置不再存在所以它失败了。
我认为在 Windows cmd.exe
中将多个命令放在一行中的方法是使用 &
因此您可以尝试像这样重写您的 makefile:
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 \
& cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
(注意 call
行末尾的反斜杠,然后是 &
)。
我已经在我的 makefile 中激活了 vcvarsall.bat
,但是当我尝试编译我的程序时仍然出现这个错误:
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.11.1
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
process_begin: CreateProcess(NULL, cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [build] Error 2
[Process exited 2]
生成文件:
all: build run
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
@cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
run:
@bin\main.exe
当我手动输入命令时,代码确实被编译并且我生成了可以运行的可执行文件,但是我也从编译器收到了这些奇怪的警告消息:
C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MS
VC.29.30133\include\ostream(746): warning C4530: C++ exception handler
used, but unwind semantics are not enabled. Specify /EHsc
main.cpp(4): note: see reference to function template instantiation 'std:
:basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_t
raits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char
*)' being compiled
Microsoft (R) Incremental Linker Version 14.29.30133.0
Copyright (C) Microsoft Corporation. All rights reserved.
我正在使用 Windows 10.
在 makefile 配方中,每个命令行都是 运行 在它自己的 shell 中。 Windows中vcvarsall.bat
文件设置了一堆环境变量,环境变量只对当前shell有效;当 shell 退出时,它们就消失了。当你 运行:
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
@cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
首先 make 启动 shell 和 运行s call
在其中设置 Visual Studio 环境,然后 shell 退出和所有这些变量设置丢失。然后 make 开始另一个 shell 和 运行s cl
但是它想要的环境设置不再存在所以它失败了。
我认为在 Windows cmd.exe
中将多个命令放在一行中的方法是使用 &
因此您可以尝试像这样重写您的 makefile:
build: main.cpp
@call "C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 \
& cl /Z7 /W3 C:\Dev\LearningC++\main.cpp
(注意 call
行末尾的反斜杠,然后是 &
)。