Как намеренно замедлить компиляцию? - PullRequest
3 голосов
/ 10 июня 2019

Есть много вопросов, спрашивающих, как ускорить компиляцию кода C ++.Мне нужно сделать обратное.

Я работаю с программным обеспечением, которое отслеживает вызов компилятора для выполнения статического анализа кода.Но если процесс компиляции закрывается слишком быстро, программа мониторинга может его пропустить.Поэтому мне нужно замедлить компиляцию.Я понимаю, что это ужасное решение, и надеюсь, что оно будет временным.

Я предложил два решения:

  • Отключить параллельную сборку, включить генерацию списка препроцессоров и компиляторов.Это работает, но требует много щелчков мышью
  • Используйте опцию компилятора, чтобы принудительно включить специальный заголовочный файл, который как-то замедляет компиляцию.

К сожалению, я не смог придумать что-то простое дляписать и сложно компилировать одновременно.Использование большого количества #warning, кажется, работает, но, очевидно, значительно загромождает вывод.

Я использую Keil с компилятором armcc, поэтому я могу использовать большую часть C ++ 11, но максимальная глубина рекурсии шаблона составляет всего 63.

Желательно, чтобы это не приводило к дополнительным расходам для двоичного размера или времени выполнения.

UPD: Я попытаюсь прояснить это немного. Я знаю это ужасная идея, я знаю, что эту проблему нужно решать по-другому.Я попытаюсь решить ее по-другому, но я также хочу изучить эту возможность.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Может быть, это решение будет достаточно медленным =), что-то вроде @NathanOliver предлагает. Я использую таблицу времени компиляции. Это требует дополнительного места, но вы можете немного его настроить (размер таблицы и точность синуса являются параметрами шаблона функции «staticSinus», надеюсь, вы найдете свой лучший вариант). https://godbolt.org/z/DYZDF5

0 голосов
/ 10 июня 2019

Вы не хотите делать ничего подобного. Вот несколько решений различной степени сложности:

  1. Идеальное решение: вызовите код анализ из Makefile.

  2. Замените компилятор, например, Сценарий Python, который пересылает командную строку компилятору, а затем запускает инструмент analysis .

  3. Монитор make вместо компилятора - он имеет тенденцию жить дольше.

  4. Пусть крошечный скрипт-обертка поддерживает счетчик ссылок в разделяемой памяти, а когда счетчик ссылок изначально увеличивается, обертка должна оставаться в спящем режиме достаточно долго после завершения работы компилятора. Мониторинг этого скрипта.

В двух словах: инструмент мониторинга не должен ничего контролировать. Анализ кода следует запускать из инструмента сборки, т. Е. Приведенного в Makefile. Если генерация Makefile вручную слишком громоздка, используйте cmake с ninja или xmake без каких-либо зависимостей. Вы также можете сгенерировать любой файл проекта, который необходим в среде IDE, чтобы упростить работу над проектом. Но сделайте что-то еще, кроме специфичных для Keil вещей, источником правды для проекта: с этого момента все станет проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...