Сборка действий cmake для Windows x86

У меня есть проект Cmake/wxWidgets, который отлично работает на моем компьютере. Я компилирую wxWidgets, используя nmake /f makefile.vc BUILD=release TARGET_CPU=X86 и сгенерируйте проект CMake, используя cmake .. -G "Visual Studio 16 2019" -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release.

Как я уже писал, это нормально компилируется на моем компьютере. Когда я хочу создать его с помощью действия github в образе Windows 2019, я сначала беру wxWidgets, компилирую его с помощью приведенного выше оператора, генерирую wxWidgets с помощью оператора aboce и запускаю сборку с помощью cmd-скрипта, содержащего "%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. Есть ли какие-то системные настройки, которые мне не хватает?

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 это отсутствовало

Это не ответ, это рекомендация.

Но, потратив несколько часов на изучение вашей проблемы, я серьезно потянул голову за документацию Microsoft по MSBuild.

Просто используйте Ninja. Это то, что мы используем для создания наших двоичных файлов x64/x86.

Возможно, вам придется немного узнать о наборах инструментов cmake, но, по крайней мере, вам не нужно иметь дело с этой ерундой msbuild.

Ninja быстрее, работает намного лучше с cmake, это очень маленький исполняемый файл и т. Д.

Серьезно использовать msbuild/visual-studio на ваших серверах не стоит.

Еще раз прошу прощения, это не прямой ответ на ваш вопрос, если вы продолжите идти по этому пути, мне любопытно увидеть ответ.

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

Но что я обнаружил:

Я скажу, что меня очень смущает разница между PlatformTarget и Platform. Потому что все создаваемые мной решения визуальной студии даже не имеют PlatformTarget в качестве свойства. Я просмотрел сгенерированные файлы решений и нигде не увидел этого. Конечно, я использую vs2019, так что, возможно, он устарел, я не знаю.

Предпочитайте расширять свойство /p -> /, это просто хорошая практика для сценариев вашего сервера сборки.

Возможно, попробуйте вместо этого использовать свойство платформы "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.

Другие вопросы по тегам