CMake -G Ninja в Windows указывает x64

Я использую CMake на Windows с генератором ниндзя

cmake -G Ninja ..

Используется стандартный набор инструментов для Windows x86. Как указать x64 с помощью генератора ниндзя?

PS: я знаю, как генерировать x64 с Visual Studio

cmake -G "Visual Studio 12 2013 Win64 ..

3 ответа

Решение

Вы должны установить среду компилятора соответственно перед вызовом Ninja поколение. Если у вас установлена ​​Visual Studio 2013 по стандартному пути установки, вы звоните:

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

Редактировать: Спасибо за подсказку от @Antwane: "Или просто запустите команду CMake из Microsoft Visual Studio Command Prompt (x64), Ярлык для этой подсказки находится в меню "Пуск".

Наименование варьируется в зависимости от версии 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
...

Когда я пытался запустить cmake в командной строке в Windows, пытаясь использовать 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 ..

Этот ответ предполагает, что у вас установлена ​​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>

Позвольте мне объяснить, что делает каждый из них:

  • Командная строка x64 Native Tools для предварительной версии VS 2019

    • Используйте компилятор x64 для компиляции для машины x64
  • Командная строка x64_x86 Cross Tools для предварительной версии VS 2019

    • Используйте компилятор x64 для компиляции для машины x86
  • Командная строка собственных инструментов x86 для предварительной версии VS 2019

    • Используйте компилятор x86 для компиляции для машины x86
  • Командная строка x86_x64 Cross Tools для предварительной версии VS 2019

    • Используйте компилятор x86 для компиляции для машины x64

На мой взгляд, последние 2 бесполезны в наши дни. И вызвали многочисленные сбои 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

Теперь вы можете запустить cmake с помощью Ninja:

ПРИМЕЧАНИЕ. В этом примере я вручную указываю путь к Ninja. Вы также можете просто добавить Ninja на свой путь. И в зависимости от установки вашей визуальной студии это уже может быть сделано за вас. Если вы загружаете «Инструменты C++ CMake для Windows», у вас есть Ninja, добавленный к вашему пути. Вы даже можете добавить CMake для себя.

      cmake -S . -B build -G "Ninja" -DCMAKE_MAKE_PROGRAM=C:/foobar/ninja.exe
Другие вопросы по тегам