#c #xcode #clang #llvm #compile-time
#c #xcode #лязг #llvm #время компиляции
Вопрос:
Как я могу профилировать и оптимизировать время компиляции C с помощью Xcode?
В настоящее время я работаю над игровым проектом на C на основе Cocos2d-x с более чем 250 исходными файлами. Время компиляции (без Cocos2d-x) в настоящее время составляет около 3,5 минут, и я хотел бы узнать, где компилятор тратит больше всего времени и что я могу сделать для его оптимизации.
Я уже делал самые очевидные вещи, такие как всегда делать прямые объявления и применять парадигму «Включить то, что вы используете».
Компилятор является последней версией Clang / LLVM Xcode 8.
Комментарии:
1. Используете ли вы предварительно скомпилированные заголовки? Это дало мне коэффициент ускорения 4 в одном проекте, который я унаследовал без них.
Ответ №1:
Попробуйте создать каталог /tmp/xcode_build_timings
и перестроить свой проект. (Не забудьте удалить его позже).
Комментарии:
1. Это звучит интересно …. не могли бы вы быть немного более конкретным? Что он делает? Где именно должна быть папка и т.д.?
2. Я указал точный путь к папке. Итак, я не понимаю, что вы подразумеваете под «где именно должна быть папка»? Затем попробуйте создать свой проект после создания этой папки и проверьте содержимое. Это должно обеспечить время для сборки.
3. Хорошо, имеет смысл.
Ответ №2:
Вы всегда можете попробовать ccache. Хорошо работает в Xcode для меня, если я переопределю CC
в настройках проекта. https://ccache.samba.org/
Так, например, установите ccache через brew install ccache
. Затем создайте сценарий, который вы храните в системе управления версиями вашего проекта, который выглядит примерно так:
#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>amp;1; then
export CCACHE_CPP2=true
exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi
назовите это, например, «ccache-clang». Сохранение этого скрипта в системе управления версиями вашего проекта означает, что вы можете проверить его на другой машине, на которой не установлен ccache, и тогда он просто будет использовать компилятор Clang по умолчанию.
Затем в Xcode в разделе Настройки сборки для вашего проекта добавьте «Определяемый пользователем» параметр «CC» и добавьте его в путь к вашему скрипту. « ${PROJECT_DIR}/ccache-clang
» например.
Эта статья — отличный ресурс для начала работы. https://pspdfkit.com/blog/2015/ccache-for-fun-and-profit /
Комментарии:
1. Но разве Xcode уже не делает этого? Где вы переопределили CC и до какого значения? Помогает ли это для профилирования или оптимизации? Пожалуйста, дайте немного больше информации о том, что именно вы делаете и чего достигаете 😉
2. Xcode избегает повторного добавления файлов, когда это возможно, но ccache фактически выполняет компиляцию из кэша на диске, поэтому даже чистая перестройка будет намного быстрее. Я добавил более подробные инструкции
3. Я настроил его сейчас, и, похоже, он работает довольно хорошо, но это не приносит действительно большого улучшения (пока). У меня есть несколько попаданий в кеш здесь и там, но большую часть времени он компилирует новые. Я также попытался поиграть с настройками из статьи. У вас есть какие-то дополнительные советы для меня?
4. частично эта проблема может быть связана с тем, что Xcode играет с папкой производных данных. Вы можете попробовать зафиксировать эту папку в определенной позиции, то же самое с выводом сборки. Я не помню настройки навскидку, но поскольку ccache использует путь к файлу как часть ключа, способ управления Xcode может привести к большему количеству промахов
5. Ах да … это имеет смысл. Может ли это быть связано с ccache base_dir? Вы установили для этого какое-то значение / в производную папку или в исходную папку?