【问题标题】:Build 32-bit fmt with msbuild使用 msbuild 构建 32 位 fmt
【发布时间】:2022-01-14 05:59:46
【问题描述】:

我正在尝试使用 cmake/msbuild 在 Windows Server 2019 上构建 32 位 fmt(我没有完整的 Visual Studio GUI,我只有命令行构建工具)。我收到此错误:

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(408,5): 错误 MSB8013:此项目不包含配置和 Debug|Win32的平台组合。

它可以构建为 64 位,但这不是我需要的。我认为这是因为 fmt 生成的构建文件没有针对 32 位 Windows 的配置(我认为 Debug 位并不重要,它也不适用于 Release 配置)。

按照 fmt 说明,我在 build 子目录中执行此操作:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_GENERATOR_PLATFORM=x86 ..
cmake --build . --config Release
cmake --install . --prefix <fmtlib_target_dir> --config Release

有没有办法在 Windows 上将 fmt 构建为 32 位?

【问题讨论】:

  • 可能是 CMake 只是选择了 64 位编译器,因此创建了一个针对该编译器的项目。整个过程如何启动,CMake运行的环境是什么?使用“x86 Native Tools 命令提示符”还是 64 位版本? (见docs.microsoft.com/en-us/cpp/build/…
  • 我只是在使用常规命令提示符并自己调用 vcvarsall.bat。我不知道那里有那些不同的命令提示符,但看起来基本上做同样的事情。无论如何,这是一个好主意(谢谢),但它会导致同样的问题!
  • 您是否为 CMake 指定了 32 位生成器?请参阅github.com/fmtlib/fmt/blob/master/support/appveyor-build.py,我认为应该正确构建
  • 有效!谢谢!我需要将 -G "Visual Studio 16 2019" -A Win32 添加到我的 cmake 命令中。非常感谢,如果您将其发布为答案,我会将其标记为已接受。 :-)

标签: msbuild 32-bit fmt


【解决方案1】:

对于有 CI 构建的项目,关于如何构建的最佳文档通常是 CI 脚本/配置本身;来自https://github.com/fmtlib/fmt/blob/master/support/appveyor-build.py

if image == 'Visual Studio 2019':
    generator = 'Visual Studio 16 2019'
    if platform == 'x64':
        cmake_command.extend(['-A', 'x64'])
else:
    if image == 'Visual Studio 2015':
        generator = 'Visual Studio 14 2015'
    elif image == 'Visual Studio 2017':
        generator = 'Visual Studio 15 2017'
    if platform == 'x64':
        generator += ' Win64'
cmake_command.append('-G' + generator)

换句话说:为 32 位构建传递不同的生成器/选项,例如 -G "Visual Studio 16 2019" -A Win32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2013-06-02
    相关资源
    最近更新 更多