【问题标题】:CMake -G Ninja on Windows specify x64Windows 上的 CMake -G Ninja 指定 x64
【发布时间】:2015-09-24 13:45:52
【问题描述】:

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

cmake -G Ninja ..

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

PS:我知道如何用 Visual Studio 生成 x64

cmake -G "Visual Studio 12 2013 Win64 ..

【问题讨论】:

    标签: windows cmake 64-bit x86-64 ninja


    【解决方案1】:

    您必须在调用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 版本而异:


    当我查看生成的 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
    ...
    

    【讨论】:

    • 或者简单地从“Microsoft Visual Stduio 命令提示符 (x64)”运行 CMake 命令。此提示的快捷方式位于开始菜单中
    • 请注意 /DWIN32 仍然设置在缓存文件中。这来自 Windows-MSVC.cmake
    【解决方案2】:

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

    以下命令行有效:

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

    【讨论】:

    • 在我的机器中,这个给定的 cl.exe 不是完整路径,在 PATH 中找不到。猜猜需要给出完整的路径
    【解决方案3】:

    此答案假定您已安装 Visual Studio 并已安装所有正确的 C++ 库,以及安装 Visual Studio 时未安装的内容。

    开始在开始菜单中输入“x64 Native Tools”。打开文件位置,你会看到一定数量的快捷方式。在我的 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>
    

    让我解释一下每个人的作用:

    • 用于 VS 2019 预览版的 x64 原生工具命令提示符

      • 使用 x64 编译器为 x64 机器编译
    • 用于 VS 2019 预览版的 x64_x86 跨工具命令提示符

      • 使用 x64 编译器为 x86 机器编译
    • 用于 VS 2019 预览版的 x86 原生工具命令提示符

      • 使用 x86 编译器为 x86 机器编译
    • 用于 VS 2019 预览版的 x86_x64 跨工具命令提示符

      • 使用 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 添加到您的路径中。根据您的视觉工作室安装,这可能已经为您完成。如果您下载“Windows 的 C++ CMake 工具”,则您已将 Ninja 添加到您的路径中。您甚至可以为您添加 CMake。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2018-12-23
      • 2021-12-08
      • 2014-04-30
      • 1970-01-01
      • 2019-03-16
      相关资源
      最近更新 更多