Расскажите, пожалуйста, что и как нужно написать автотулзам, чтоб они (иногда) не перегенерировали генерируемые С-файлы?
Вот у меня есть lexer.l, из него re2c делает lexer.c. На платформе где это будет собираться, допустим, нет re2c, есть С-компилятор. Как быть? Точнее, какие для этого есть лучшие практики? Сейчас в configure.ac так:
AC_CHECK_PROGS([RE2C], [re2c], [:])
if test "$RE2C" = :; then
AC_MSG_ERROR([This package needs re2c.])
fi
То есть тупо проверяем есть ли re2c и выходим с ошибкой если нет. Нехорошо.
Можно, наверное, таскать сгенерированный файл с собой и если не нашили re2c заменить его на «cp generated/lexer.c .» ? Тогда в какой момент перегенерировать этот generated/lexer.c? Добавлять таргет? Как это вообще принято делать?
Я такое точно видел при сборке какой-то СУБД. Если ./configure не находил bison, то использовал пре-генерированный С-файл. Но это было давно и тогда даже не думал присматриваться.
Напомню, это нужно для автотулз, но если cmake/bjam/кто-то еще умеют такое, наверное тоже интересно было бы посмотреть