Здравствуйте, Chorkov, Вы писали:
C>Мне сильно помогло, написание CI скриптов сборки. C>Т.е. скрипт должен писаться так, чтобы не компилировать/ликовать файлы, если они уже созданы и имеют правильную дату модификации, то не переделывать. C>Тогда, до точки предыдущего провала доходим за 5 минут, и печаль не возникает.
Я понял что больше всего в жизни я боюсь этих скриптов. С++ при всей своей монструозности не так страшен. А вот это дерьмо, когда половина на python, может быть еще часть на perl, где-то cmake, где-то еще какие-то системы сборки и оно как то все состыкуется в одну большую какаху — это
Здравствуйте, Shmj, Вы писали:
S>Такой вопрос. Вот есть 20 кб. скриптов сборки. Запуск занимает 4 часа.
S>В процессе запуска возникают ошибки, но процесс не останавливается. Потом в конце останавливается — не может найти какой-то CMake-файл (их там много).
S>Был ли у вас опыт отладки таких скриптов и как лучше подходить к вопросу? Где взять оптимизм?
Мне сильно помогло, написание CI скриптов сборки.
Т.е. скрипт должен писаться так, чтобы не компилировать/ликовать файлы, если они уже созданы и имеют правильную дату модификации, то не переделывать.
Тогда, до точки предыдущего провала доходим за 5 минут, и печаль не возникает.
Полная пересборка, с ноля запускается только в полночь.
Как я понимаю, make/nmake/cmake/qmake умеют это из коробки.
CI от полной пересборки отличается только тем, что:
1) (Не)Удяляем временные папки и папки со старыми исходникам.
2) вместо git clone делаем git pull
Re[2]: Как отлаживают скрипты сборки С++ -проекта?
Здравствуйте, koenjihyakkei, Вы писали:
K>Здравствуйте, Shmj, Вы писали:
K>Смотрю на сообщения об ошибках от cmake и исправляю если ошибка понятна. Иначе дебажу с помощью логов — функция message().
K>...
Я себе вот такой враппер поверх message написал:
# Trace a list of variables
# If variable doesn't exist it will be treated as a text
# If variable is a single value it will be shown as VAR = VALUE
# If variable is an array it will be shown as a list VAR = [ val1, val2, ... ]
# Usage: echo(<var1> <var2>...)
function(echo)
# Long prefixes are required to avoid vars name conflicts
foreach (ds_echo_arg ${ARGV})
set(ds_echo_name ${ds_echo_arg})
set(ds_echo_value ${${ds_echo_arg}})
list(LENGTH ds_echo_value ds_echo_count)
if (NOT DEFINED ${ds_echo_name})
message(STATUS "${ds_echo_name}")
elseif (${ds_echo_count} LESS 2)
message(STATUS "${ds_echo_name} = ${ds_echo_value}")
else ()
string(JOIN ", " ds_echo_text ${ds_echo_value})
set(ds_echo_text "[ ${ds_echo_text} ]")
message(STATUS "${ds_echo_name} = ${ds_echo_text}")
endif ()
endforeach ()
endfunction()
А сейчас потиху осваиваю отладку в CLion. Вроде работает.