为 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?
我查看 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
我有一个 Cmake/wxWidgets 项目可以在我的电脑上正常构建。
我使用 nmake /f makefile.vc BUILD=release TARGET_CPU=X86
编译 wxWidgets 并使用 cmake .. -G "Visual Studio 16 2019" -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release
.
就像我写的那样,这在我的电脑上编译得很好。当我想在 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?
我查看 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