为什么生成“ NMake Makefiles”时,cmake在powershell和命令行中的行为有所不同?

时间:2019-02-23 11:35:25

标签: powershell cmd cmake visual-studio-2017

通过以下方式加载开发人员工具时:

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.7
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

然后我尝试通过以下方式为CMD中的C ++ hello world应用程序生成构建文件:

var STUD = [{"id":1,"name":"Kida"},{"id":2,"name":"Kidb"},{"id":3,"name":"Kidc"},{"id":4,"name":"Kidd"},{"id":5,"name":"Kide"}];
var IDCRD = [{"id":3,"status":"Y"},{"id":4,"status":"Y"},{"id":2,"status":"N"},{"id":5,"status":"Y"},{"id":1,"status":"N"}];

function status(i){ return IDCRD.filter(w => w.id == STUD[i].id)[0].status }

console.log(status(0));
console.log(status(1));
console.log(status(2));
console.log(status(3));
console.log(status(4));

我得到:

CMake Error: Could not create named generator 'NMake

Generators
Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                             Use -A option to specify architecture.
* Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                             Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                             Optional [arch] can be "Win64" or "ARM".
Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                             Optional [arch] can be "Win64" or "ARM".
Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                             Optional [arch] can be "Win64" or "ARM".
Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
                             Optional [arch] can be "Win64" or "IA64".
Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                             Optional [arch] can be "Win64" or "IA64".
Borland Makefiles            = Generates Borland makefiles.
NMake Makefiles              = Generates NMake makefiles.
NMake Makefiles JOM          = Generates JOM makefiles.
Green Hills MULTI            = Generates Green Hills MULTI files
                             (experimental, work-in-progress).
MSYS Makefiles               = Generates MSYS makefiles.
MinGW Makefiles              = Generates a make file for use with
                             mingw32-make.

# etc.

但是如果我通过在CMD中编写status = i => IDCRD.filter(w => w.id == STUD[i].id)[0].status切换到PowerShell并运行相同的命令:

cmake -G 'NMake Makefiles'

它正常工作:

-- The C compiler identification is MSVC 19.16.27027.1
-- The CXX compiler identification is MSVC 19.16.27027.1

# etc.

您知道为什么powershell在PowerShell中不能在CMD中工作吗?

1 个答案:

答案 0 :(得分:1)

Windows命令提示符无法将单引号识别为引号字符。您必须使用双引号代替。

更改

cmake -G 'NMake Makefiles'

cmake -G "NMake Makefiles"

问题将消失。