как использовать jenkins для создания 32-разрядных и 64-разрядных программ и запечатать в одном пакете

#c #windows #jenkins #cmake #compilation

#c #Windows #дженкинс #cmake #Сборник

Вопрос:

это еще одно время, чтобы обратиться за помощью к stack overflow .

Я пытаюсь использовать jenkins, моя цель — создать установочный пакет Windows, содержащий 32-битную и 64-битную версии.

Моя предыдущая ручная процедура такова: построил 32-битную и 64-битную версии отдельно и использовал InnoSetup для сборки пакета, содержащего 2 версии.

если использовать Дженкинс , процедура будет :

  1. сервер Linux jenkins (master) отправляет запрос на сборку на windowns jenkins server (agent)
  2. код проверки агента из svn
  3. создал пакет с 2 версиями

Я предполагаю, что мастеру нужно будет отправить 2 запроса (или, может быть, один запрос, чтобы запустить 2 задания для создания 2 версий отдельно, извините, я новичок в Дженкинсе) агенту

но , к сожалению , 32 , 64 — разрядные версии будут нуждаться в разных CMakeLists.txt , так как им нужно будет ссылаться на стороннюю библиотеку. (необходимо указать путь к третьей библиотеке в CMakeList)

но svn — код — это всего лишь одна копия , так что CMakeList.txt будет то же самое .(ручным способом я пересмотрю список CMakeList при создании конкретной версии)

Итак, я не знаю, как это сделать?

Есть ли способ развернуться ?(создать еще один репозиторий svn?)

Спасибо…

Комментарии:

1. Почему вы считаете, что вам нужны разные версии CMakeList.txt файлы для компиляции различных конфигураций? Это очень похоже на анти-шаблон CMake.

Ответ №1:

Использование отдельных CMakeLists.txt файлов не требуется. Вы можете отличить 32- и 64-разрядные версии, проверив CMAKE_SIZEOF_VOID_P после project() команды. Это позволяет вам сохранить логику, специфичную для 32/64 бит, отдельно.

Кроме того, вы можете установить переменные кэша при настройке cmake via -D VAR_NAME=value .

CMakeLists.txt

 ...

project(MyProject)

add_executable(MyProgram main.cpp wordsizeDependent.h)

# additional logic that depends on 32/64 bit
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
    target_sources(MyProgram PRIVATE x64/wordsizeDependent.cpp)
else()
    target_sources(MyProgram PRIVATE Win32/wordsizeDependent.cpp)
endif()
  

Поскольку я не знаком с плагином jenkins cmake, я воспользуюсь bat шагом, предполагающим, что вы используете конвейер jenkins и предполагаете, что каталог repo содержит CMakeLists.txt файл. Также build64 и build32 должен уже существовать и быть чистым (или, по крайней мере, не содержать значений кэша, которые вызывают поведение, отличное от ожидаемого).

Кроме того, я предполагаю, что логика выполняется на правильном узле jenkins, и там установлен cmake.

 // 64 bit build
bat """cmake -G "Visual Studio 16 2019" -A x64 -S repo -B build64
cmake --build build64 --config Release"""


// 32 bit build
bat """cmake -G "Visual Studio 16 2019" -A Win32 -S repo -B build32
cmake --build build32 --config Release"""
  

Вероятно, вы захотите добавить cpack вызов, использовать InnoSetup и перенести полученный пакет в соответствующее место на соответствующем компьютере. Это позволило бы создавать как 32, так и 64-разрядные версии с использованием одного и того же задания. Вы даже можете запускать сборки на агентах Linux и Windows в одном и том же задании, если это необходимо; Задания не ограничены одним агентом, и вы можете выполнять более одной задачи для агента за задание…