ChatGPT解决这个技术问题 Extra ChatGPT

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

让 cmake 在 Windows 上使用 Visual Studio 构建 x86 的一种方法如下:

为 x86 启动 Visual Studio 命令提示符 运行 cmake: cmake -G "NMake Makefiles" \path_to_source\ nmake

让 cmake 在 Windows 上使用 Visual Studio 构建 x64 的一种方法如下:

为 x64 启动 Visual Studio 命令提示符 运行 cmake: cmake -G "NMake Makefiles" \path_to_source\ nmake

使用 Cmake,我如何编译一个或两个架构? (就像 Visual Studio 在 IDE 中如何做的那样)

这里也一样,但似乎有一个解决方案:zeroset.mnim.org/2015/07/15/…(并且没有关闭提示,并使用 nmake
如果您来到这里是因为您在 Windows 上使用 -G"Ninja" 作为生成器;构建 32bit 使用 "x86 Native Tools Command Prompt" 构建 64bit 使用 "x64 Native Tools Command Prompt" 它将使用正确的库、编译器和链接器。

s
sakra

CMake 无法做到这一点。您必须生成两个单独的构建文件夹。一种用于 x86 NMake 构建,另一种用于 x64 NMake 构建。您也无法使用 CMake 生成涵盖两种架构的单个 Visual Studio 项目。

要在不启动 Visual Studio 命令提示符的情况下从命令行为 32 位和 64 位构建 Visual Studio 项目,请使用常规的 Visual Studio 生成器。

对于 CMake 3.13 或更高版本,运行以下命令:

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

对于早期版本的 CMake,请运行以下命令:

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

使用 Visual Studio 生成器之一的 CMake 生成的项目可以使用选项 --build 后跟构建目录从命令行构建。 --config 选项指定构建配置。


有没有一种方法可以使用一个命令提示符 + 两个构建目录,并且无需退出并启动 x86 提示符,然后是 x64 提示符即可创建两种架构?
Z
Zam

尝试使用 CMAKE_GENERATOR_PLATFORM

例如

// x86
cmake -DCMAKE_GENERATOR_PLATFORM=x86 . 

// x64
cmake -DCMAKE_GENERATOR_PLATFORM=x64 . 

简单而便携!
在 Visual Studio 2019 中使用 Win32Win64 而不是 x86x64
@maidamai 我相信它是 VS 16 2019 的 Win32x64 stackoverflow.com/a/58548724/3554391
u
user7610

除了 CMAKE_GENERATOR_PLATFORM 变量,还有 -A 开关

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.