Решение ismail является распространенным подходом, но оно страдает от некоторых серьезных проблем. Если пользователь пытается получить отладочную сборку, выполнив «./configure --enable-debug», сценарий конфигурации установит CFLAGS в «-g -O2», а Makefile будет использовать «-g3 -O0 ... -g». -O2 'при сборке любых исполняемых файлов. В этом случае gcc будет использовать -O2, а некоторые компиляторы прервутся из-за конфликтующих опций -O. Любой сценарий не является ожидаемым поведением.
Сборка с отладочными символами или нет - это НЕ то, о чем должен беспокоиться сопровождающий проекта. Это проблема для пользователя. Если у вас есть проект, и вы хотите сделать отладочную сборку или сборку выпуска, вы должны использовать разные опции во время настройки. Например,
$ mkdir debug
$ mkdir release
$ cd debug && /path/to/configure --prefix=/dbg \
CPPFLAGS=-DDEBUG CXXFLAGS="-g -O0" && make && make install
$ cd ../release && /path/to/configure CPPFLAGS=-DNDEBUG && make && make install
Это установит отладочную сборку в / dbg / bin и 'release' установит в / usr / local / bin
Кроме того, вы можете значительно сократить скуку при наборе текста, используя файл CONFIG_SITE. Например, вы можете сделать:
echo 'CPPFLAGS=-DDEBUG CFLAGS="-g -O0"' >> /dbg/share/config.site
и все последующие вызовы 'configure --prefix = / dbg' будут автоматически наследовать параметры CPPFLAGS и CFLAGS без необходимости указания в командной строке.
Если, как сопровождающий пакета, вы хотите предоставить пользователю простой способ создания «отладочной версии», вполне допустимо включить в дистрибутив скрипт, который вызывает скрипт конфигурации с соответствующими аргументами и вызывает make && make install
, но совершенно не нужно засорять ваши мета-файлы автоинструмента таким мошенничеством. Это просто не принадлежит там. И будьте осторожны, многие пакеты предпринимали попытки добавить --enable-debug
, что просто неправильно. Если пользователь вызывает configure CFLAGS="-g -O0"
, но получает сборку, которая применяет неожиданные флаги, то у вас есть ошибка, и ваш пакет сломан . Это слишком распространенный опыт, и если вы поддерживаете пакет (в настоящее время думающий о tmux
и curl
), в котором пользователь не получает то, что любой разумный человек назвал бы «отладочной сборкой» после вызова configure CFLAGS="-g -O0"
, тогда ваш пакет сломан .
Важным моментом, который всегда следует помнить при обслуживании пакета с автоинструментами, является то, что пользователь может использовать совершенно другую цепочку инструментов, чем вы. Вполне возможно, что цепочка инструментов пользователя потребует -DMAKE_IT_A_DEBUG
или -DUSE_DEBUG
или -I/usr/banana-split/debug/build/with/georges/headers
. Возможно, потребуется -O145
или -Q
, переданные компилятору, или -debug
, переданные компоновщику, или ... что-нибудь еще. Как сопровождающий, вы просто не обладаете информацией, необходимой даже для того, чтобы сделать фразу «сборка отладки» значимой для всех пользователей. Так что не пытайтесь, потому что вы можете сделать программное обеспечение не подлежащим сборке для определенного набора пользователей.