【问题标题】:Cmake actions build for Windows x86为 Windows x86 构建的 Cmake 操作
【发布时间】:2021-02-20 22:02:23
【问题描述】:

我有一个 Cmake/wxWidgets 项目,可以在我的电脑上正常构建。 我使用nmake /f makefile.vc BUILD=release TARGET_CPU=X86 编译wxWidgets 并使用cmake .. -G "Visual Studio 16 2019" -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release 生成CMake 项目。

就像我写的那样,这在我的电脑上编译得很好。当我想在 Windows 2019 Image 上使用 github 操作构建它时,我首先拉取 wxWidgets,使用上述语句编译它,使用 aboce 语句生成 wxWidgets,并使用包含 "%programfiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe" ".\build\NaCl-Configurator.sln" /p:Configuration=Release /p:Platform=Win32 /p:PlatformTarget=x86

的 cmd 脚本触发构建

但是这样做时我总是收到以下错误:

  wxmsw31u_core.lib(corelib_wincmn.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86' [D:\a\abc\abc\build\abc.vcxproj]

如果我将所有内容都切换到 x64,它可以正常编译,但我需要 x86 构建。有没有我遗漏的系统设置?

【问题讨论】:

  • 在运行 msbuild 命令之前,您可能需要通过调用 vcvarsall.bat x86 来设置 Visual Studio 环境。
  • @vre 感谢您的提示 - 没有帮助。在此之前我已经尝试过"%programfiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat",也没有成功
  • 我很困惑您是否使用 Visual Studio 在服务器上构建您的项目?
  • @hdf89shfdfs 我正在我的电脑上开发,但我希望每个版本(不是每个提交)都建立在 github 操作上。 linux 构建完全没有问题,并且 github 操作提供了一个 Windows 2019 服务器,其中预安装了 vs Enterprise 来编译项目。 here 是一个概述
  • wxWidgets 存储库状态 here从 x86 命令提示符构建 32 位发行版 DLL 版本,”你这样做了吗,例如在运行nmake ... 之前,您是否调用了vcvarsall.bat x86

标签: github cmake wxwidgets github-ci


【解决方案1】:

这不是答案,这是建议。

但是在花了几个小时研究您的问题之后,我认真地阅读了 Microsoft 的 MSBuild 文档。

只需使用忍者。这是我们用来构建 x64/x86 二进制文件的内容。

您可能需要了解一些有关 cmake 工具链的知识,但至少您不必处理这种 msbuild 废话。

Ninja 速度更快,与 cmake 一起工作得更好,是一个非常小的可执行文件,等等。

在您的服务器上认真使用 msbuild/visual-studio 是不值得的。

再次抱歉,这不是您问题的直接答案,如果您继续沿着这条路走下去,我很想看到答案。

================================================ =====

我发现了什么:

我会说我对 PlatformTarget 和 Platform 之间的区别感到非常困惑。因为我生成的所有视觉工作室解决方案都没有 PlatformTarget 作为任何地方的属性。我扫描了生成的解决方案文件,但在任何地方都没有看到。当然,我使用的是 vs2019,所以我不知道它可能已被弃用。

更喜欢扩展 /p -> / 属性,这对构建服务器脚本来说是一种很好的做法。

也许尝试改用平台属性“x86”。我真的找不到关于哪个是首选/正确的具体信息。 Win32/x86。

作为最后的猜测,请开始打印你的编译器,以及来自 cmake 的工具链信息。

资源:

How do I specify the platform for MSBuild?

https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-target-framework-and-target-platform?view=vs-2019

我查看 msbuild 命令行,查看我生成的 Visual Studio 解决方案。

【讨论】:

  • 感谢您的努力!如果我在 cmake 命令中指定一个目标,则在 vs 项目文件中生成 x64 或 Win32 目标,即使对于 vs 2019 也是如此。如您所见,我的问题已解决,但我会看看 Ninja。
【解决方案2】:

我正在使用另一个 github 操作来访问 nmake 以构建 wxWidgets。在此操作中,我必须指定架构。 所以使用

      - name: Preparing nmake    
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: x86
      - name: start building wx widgtes
        run: |
          cd ${{ env.WXWIN }}${{ env.wxMSW_VER }}\build\msw
          nmake /f makefile.vc BUILD=release TARGET_CPU=X86

然后继续就行了。只是缺少with: arch: x86

【讨论】:

  • @cpp_guy_who_does_gfx 我会的。但是系统只允许我在第二天接受我自己的答案;-)
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2015-04-05
相关资源
最近更新 更多