Сборка действий 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?
Я смотрю на командную строку msbuild и смотрю на созданные мной решения Visual Studio.