1

我有一个在我的电脑上构建良好的 Cmake/wxWidgets 项目。我使用编译 wxWidgetsnmake /f makefile.vc BUILD=release TARGET_CPU=X86并使用cmake .. -G "Visual Studio 16 2019" -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release.

就像我写的那样,这在我的电脑上编译得很好。当我想在 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

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

  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 版本。我缺少任何系统设置吗?

4

2 回答 2

1

这不是答案,这是建议。

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

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

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

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

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

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

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

但我发现:

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

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

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

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

资源:

如何为 MSBuild 指定平台?

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

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

于 2020-11-09T12:24:25.290 回答
1

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

于 2020-11-09T13:10:14.247 回答