Процесс — программа, которая выполняется в текущий момент. Стандарт ISO 9000:2000 определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие.
Написать программу на C++ для упрощения процесса сборки, установки и упаковки проектов основанных на конфигурационных файлах CMakeLists.txt.
Исполняемый файл программы должен иметь название builder и поддерживать следующие опции запуска:
$ ./builder --help
Usage: builder [options]
Allowed options:
--help : выводим вспомогательное сообщение
--config <Release|Debug> : указываем конфигурацию сборки (по умолчанию Debug)
--install : добавляем этап установки (в директорию _install)
--pack : добавляем этап упаковки (в архив формата tar.gz)
--timeout <count> : указываем время ожидания (в секундах)
Примеры запуска программы с описанием эквивалентных запусков процессов программы CMake.
$ ./builder
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Debug
$ cmake --build _builds
$ ./builder --config Release
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Release
$ cmake --build _builds
$ ./builder --install
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Debug
$ cmake --build _builds
$ cmake --build _builds --target install
$ ./builder --pack
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Debug
$ cmake --build _builds
$ cmake --build _builds --target package
$ ./builder --install --pack
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Debug
$ cmake --build _builds
$ cmake --build _builds --target install
$ cmake --build _builds --target package
$ ./builder --timeout 500
<=>
$ cmake -H. -B_builds -DCMAKE_INSTALL_PREFIX=_install -DCMAKE_BUILD_TYPE=Debug
$ cmake --build _builds
-
Для работы с процессами необходимо использовать библиотеку Boost.Process (см. документацию).
-
В случае если время ожидания истекает, то программа завершает все дочерние запущенные процессы.
-
Этап установки запускается, только в случае успешного завершения процесса сборки.
-
Этап упаковки запускается, только в случаях успешного завершения процесса сборки и успешного завершения процесса установки.
-
Стандартные потоки вывода дочерних процессов необходимо перенаправить в стандартный поток вывода родительского процесса исполняемого файла builder.
-
Подключение библиотек Boost.Process и Async++ осуществить с использованием пакетного менеджера Hunter.
-
Для обработки параметров командной строки использовать компонент
boost::program_options
. -
Для реализации цепочки событий необходимо использовать библиотеку Async++ (см. документацию).