为 Windows x86 构建 Cmake 动作

Cmake actions build for Windows x86

我有一个 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 图像上使用 github 操作构建它时,我首先拉取 wxWidgets,使用上述语句编译它,使用 aboce 语句生成 wxWidgets 并使用包含的 cmd 脚本触发构建"%programfiles(x86)%\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\msbuild.exe" ".\build\NaCl-Configurator.sln" /p:Configuration=Release /p:Platform=Win32 /p:PlatformTarget=x86

但是在执行此操作时,我总是会收到以下错误:

  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 的 Microsoft 文档感到很紧张。

就用忍者吧。这就是我们用来构建 x64/x86 二进制文件的东西。

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

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

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

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

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

虽然我发现了什么:

我会说我对 PlatformTarget 和 Platform 之间的区别感到很困惑。因为我生成的所有 visual studio 解决方案甚至都没有将 PlatformTarget 作为 属性。我扫描了生成的解决方案文件,但没有在任何地方看到它。当然,我正在使用 vs2019,所以我不知道它是否已被弃用。

最好扩展 /p -> /属性,这对您的构建服务器脚本来说是个好习惯。

或许尝试使用 属性“x86”平台。我真的找不到关于 preferred/correct 的具体信息。 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 个解决方案。

我正在使用另一个 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