如何使用 CMAKE 从命令行在 Windows 上构建 x86和/或 x64?

让 cmake 使用 Visual Studio 在 Windows 上构建 x86的一种方法是这样的:

  1. 启动 x86的 VisualStudio 命令提示符
  2. 运行 cmake: cmake -G "NMake Makefiles" \path_to_source\
  3. Nmake

让 cmake 使用 Visual Studio 在 Windows 上构建 x64的一种方法是这样的:

  1. 启动 x64的 VisualStudio 命令提示符
  2. 运行 cmake: cmake -G "NMake Makefiles" \path_to_source\
  3. Nmake

使用 Cmake,如何编译两种架构中的一种或两种? (比如 VisualStudio 如何在 IDE 中编译)

145394 次浏览

This cannot be done with CMake. You have to generate two separate build folders. One for the x86 NMake build and one for the x64 NMake build. You cannot generate a single Visual Studio project covering both architectures with CMake, either.

To build Visual Studio projects from the command line for both 32-bit and 64-bit without starting a Visual Studio command prompt, use the regular Visual Studio generators.

For CMake 3.13 or newer, run the following commands:

cmake -G "Visual Studio 16 2019" -A Win32 -S \path_to_source\ -B "build32"
cmake -G "Visual Studio 16 2019" -A x64 -S \path_to_source\ -B "build64"
cmake --build build32 --config Release
cmake --build build64 --config Release

For earlier versions of CMake, run the following commands:

mkdir build32 & pushd build32
cmake -G "Visual Studio 15 2017" \path_to_source\
popd
mkdir build64 & pushd build64
cmake -G "Visual Studio 15 2017 Win64" \path_to_source\
popd
cmake --build build32 --config Release
cmake --build build64 --config Release

CMake generated projects that use one of the Visual Studio generators can be built from the command line with using the option --build followed by the build directory. The --config option specifies the build configuration.

try use CMAKE_GENERATOR_PLATFORM

e.g.

// x86
cmake -DCMAKE_GENERATOR_PLATFORM=x86 .


// x64
cmake -DCMAKE_GENERATOR_PLATFORM=x64 .

Besides CMAKE_GENERATOR_PLATFORM variable, there is also the -A switch

cmake -G "Visual Studio 16 2019" -A Win32
cmake -G "Visual Studio 16 2019" -A x64

https://cmake.org/cmake/help/v3.16/generator/Visual%20Studio%2016%202019.html#platform-selection

  -A <platform-name>           = Specify platform name if supported by
generator.