在Windows上使用CMake -G Ninja指定x64

46

我正在Windows上使用Ninja生成器的CMake

cmake -G Ninja ..

这里使用的是默认的Windows x86工具链。如何在Ninja生成器中指定x64呢?

PS:我知道如何在Visual Studio中生成x64。

cmake -G "Visual Studio 12 2013 Win64 ..
3个回答

45

在调用Ninja生成之前,您需要相应地设置编译器环境。如果您已经安装了Visual Studio 2013,并将其安装在标准安装路径,则可以调用:

你需要在调用 Ninja 生成之前按照要求设置编译器环境。如果在标准安装路径下安装了Visual Studio 2013,则可以执行如下操作:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64
cmake.exe -G "Ninja" ..

编辑: 感谢 @Antwane 的提示:"或者直接从 Microsoft Visual Studio Command Prompt (x64) 运行 CMake 命令。这个命令提示的快捷方式位于开始菜单中".

不同版本的 Visual Studio 中的名称可能会有所变化:

enter image description here


然后当我查看生成的 CMakeCache.txt 文件时,我看到:

...
//CXX compiler
CMAKE_CXX_COMPILER:FILEPATH=C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/cl.exe
...
//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING= /machine:x64
...
//Path to a program.
CMAKE_LINKER:FILEPATH=C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/link.exe
...

10
或者您可以从“Microsoft Visual Studio 命令提示符(x64)”中运行 CMake 命令。该提示符的快捷方式位于“开始菜单”中。 - Antwane
请注意,/DWIN32仍然在缓存文件中设置。这来自于Windows-MSVC.cmake。 - kuga
在PowerShell中有没有一种方法可以做到这一点? - Geng Jiawen
@GengJiawen 我使用了这个答案中的函数,在PowerShell中调用vcvarsall.bat并正确设置环境。 - Josch
在运行 vcvarsall.bat x64 后,你可以添加一个 &,然后是剩下的 cmake 命令行参数(我在这里看到过使用 here),从而使得这个操作可脚本化。 - jozxyqk

13

当我在Windows命令行中尝试使用Ninja并将目标设置为Visual Studio 14.0编译器(2015)时,运行cmake时一直选择其他已安装的编译器(在我的情况下是gcc)。

以下命令行有效:

cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" -DMSVC_TOOLSET_VERSION=140 ..

2
在我的机器上,这个gavem cl.exe不是完整路径,并且在PATH中找不到。猜测需要给出完整路径。 - harish

7
这个答案假设你已经安装了Visual Studio并在安装Visual Studio时安装了所有必要的C++库等组件。
在开始菜单中键入“x64原生工具”。打开文件位置,您会看到一定数量的快捷方式。在我的Visual Studio安装中,我只有x86/x64体系结构的编译器。
无论如何,现在您已经打开了文件位置,您将看到一堆开发人员命令提示符快捷方式:
PS C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools\VC> ls

    Directory: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools\VC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/16/2021  8:12 PM           2139 x64 Native Tools Command Prompt for VS 2019 Preview.lnk
-a---           2/16/2021  8:12 PM           2197 x64_x86 Cross Tools Command Prompt for VS 2019 Preview.lnk
-a---            3/3/2021  9:01 PM           2139 x86 Native Tools Command Prompt for VS 2019 Preview.lnk
-a---           2/16/2021  8:12 PM           2197 x86_x64 Cross Tools Command Prompt for VS 2019 Preview.lnk

PS C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools\VC>

让我解释一下每个命令的作用:
- x64 Native Tools Command Prompt for VS 2019 Preview
使用x64编译器为x64机器编译
- x64_x86 Cross Tools Command Prompt for VS 2019 Preview
使用x64编译器为x86机器编译
- x86 Native Tools Command Prompt for VS 2019 Preview
使用x86编译器为x86机器编译
- x86_x64 Cross Tools Command Prompt for VS 2019 Preview
使用x86编译器为x64机器编译
在我看来,最后两个在现代已经没用了,并且在我们的服务器上引起了多次CI崩溃。所以我们只使用64位二进制文件。
无论如何,您可以双击其中一个快捷方式:
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.10.0-pre.1.0
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview>

执行上述命令后,您将获得一个带有CMake可识别环境的命令提示符。这是因为PATH环境变量现在包含编译器等内容。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview>echo %PATH%
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\\Extensions\Microsoft\IntelliCode\CLI;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.29.29917\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Team Tools\Performance Tools;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\\x64;C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\VSPerfCollectionTools\vs2019\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\Tools\devinit;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\\MSBuild\Current\Bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\Tools\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\LLVM\bin;C:\Program Files\Git\cmd;C:\Program Files\PowerShell\7\;C:\Program Files\CMake\bin;D:\Installations\Python\Scripts\;D:\Installations\Python\;C:\Users\juanr\AppData\Local\Microsoft\WindowsApps;D:\Installations\Microsoft VS Code\bin;C:\Users\juanr\AppData\Local\GitHubDesktop\bin;D:\Git\ninja;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\Llvm\x64\bin;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja

现在你可以使用Ninja运行cmake:

注意:在这个例子中,我手动指定了Ninja的路径。您也可以将Ninja添加到您的路径中。根据您的Visual Studio安装情况,这可能已经为您完成。如果您下载了“Windows的C ++ CMake工具”,则会自动将Ninja添加到您的路径中,并为您添加CMake。

cmake -S . -B build -G "Ninja" -DCMAKE_MAKE_PROGRAM=C:/foobar/ninja.exe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接