#c #windows #jenkins #cmake #compilation
#c #Windows #дженкинс #cmake #Сборник
Вопрос:
это еще одно время, чтобы обратиться за помощью к stack overflow .
Я пытаюсь использовать jenkins, моя цель — создать установочный пакет Windows, содержащий 32-битную и 64-битную версии.
Моя предыдущая ручная процедура такова: построил 32-битную и 64-битную версии отдельно и использовал InnoSetup для сборки пакета, содержащего 2 версии.
если использовать Дженкинс , процедура будет :
- сервер Linux jenkins (master) отправляет запрос на сборку на windowns jenkins server (agent)
- код проверки агента из svn
- создал пакет с 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 в одном и том же задании, если это необходимо; Задания не ограничены одним агентом, и вы можете выполнять более одной задачи для агента за задание…