Простой make-файл со сборками выпуска и отладки - Лучшие практики

s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)

Вам не нужно escape дважды, когда вы используете raw mode.

Выход: ['123', '3.1415926']

Также тип возврата будет списком strings .Если вы хотите, чтобы возвращаемый тип, как integers и floats, использовал map

import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))

Выход: [123, 3.1415926]

23
задан Navaneeth K N 27 April 2009 в 04:19
поделиться

3 ответа

  1. It is one reasonable format. It is tied specifically to GNU Make, but that's a relatively minor problem if you have chosen to use GNU Make on every platform.
    • Если есть недостаток, вы можете связать объектные файлы, созданные в режиме отладки, чтобы создать окончательную сборку.
    • Некоторые могут утверждать, что опция 'mode = release' нестандартна; они были бы правы, но я не знаю стандартной альтернативы. Вам просто нужно знать, что ваше соглашение может не подходить всем (но это не обязательно - оно просто должно удовлетворять вас и ваших пользователей).
  2. Построение отладочной сборки по умолчанию, вероятно, целесообразно - и более разумно, чем сборка сборки релиза по умолчанию.
  3. Сброс флага -g для сборки релиза не является плохим автоматом, но если ваш код когда-либо генерирует дамп ядра, легче сделать голову или хвост дамп ядра, если файл программы содержит отладочную информацию.
    • You should consider whether to include optimization flags in there. With the GCC tool set, you can use both -g and -O. It is harder to debug optimized code, but it gives you (often significant) performance benefits.
13
ответ дан 29 November 2019 в 02:44
поделиться

Я бы предложил следующие режимы:

for debugger: -O0 -g -Wall
for development and internal release: -O2 -g -Wall
for release outside the company: -O2 -Wall

Обоснование:

  • Очень важно разработать и протестировать код в «режиме производства». Вы можете обнаружить, что в некоторых случаях код, работающий без оптимизации, в оптимизированном режиме падает из-за ошибки в вашем коде. (Поверьте мне, это часто случается) - так что используйте -O2
  • В большинстве случаев вы все еще можете довольно хорошо отлаживать даже с оптимизированным кодом, поэтому добавьте -g. Однако, если это слишком сложно, чтобы найти ошибку в таком режиме, вы можете скомпилировать для отладчика с помощью -O0
  • Только если у вас есть проблемы, включая отладочную информацию в коде, вы должны удалить -g. Хорошей идеей будет иметь -g для кода в производственной среде, потому что, если что-то выйдет из строя, вы можете получить гораздо больше информации.
11
ответ дан Artyom 29 November 2019 в 02:44
поделиться

Я бы взял совет Артема по поводу флагов и использовал -O.

Мой главный совет - сделать режим по умолчанию «релиз». Ни один пользователь за пределами вашей компании не узнает о вашем make mode=release соглашении, и 99,99% из них захотят его создать для выпуска.

Мне нравится, что вы включили -Wall во всех режимах. Если вы хотите стать действительно педантичным ... -Wall -std=c++98 -pedantic -Wextra -Wconversion - хорошее начало. -std = c ++ 98 может не понадобиться, если вы подключены к g ++, но если у вас есть какие-либо иллюзии переносимости, вы захотите этого.

3
ответ дан Schwern 29 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: