Xcode — профилирование и оптимизация времени компиляции C++

Как я могу профилировать и оптимизировать время компиляции C++ с помощью Xcode?

В настоящее время я работаю над игровым проектом C++ на основе Cocos2d-x с более чем 250 исходными файлами. Время компиляции (без Cocos2d-x) в настоящее время составляет около 3,5 минут, и я хотел бы узнать, где компилятор тратит больше всего времени и что я могу сделать для его оптимизации.

Я уже сделал самые очевидные вещи, такие как всегда делать предварительные объявления и применять парадигму «Включить то, что вы используете».

Компилятор является последней версией Clang/LLVM Xcode 8.


person keyboard    schedule 17.10.2016    source источник
comment
Используете ли вы предварительно скомпилированные заголовки? Это дало мне ускорение в 4 раза в одном проекте, который я унаследовал без них.   -  person gnasher729    schedule 17.10.2016


Ответы (2)


Попробуйте создать каталог /tmp/xcode_build_timings и перестройте свой проект. (Не забудьте потом удалить).

person Joky    schedule 19.10.2016
comment
Звучит интересно... не могли бы вы быть немного более конкретным? Что оно делает? Где именно должна быть папка и т.д.? - person keyboard; 20.10.2016
comment
Я указал точный путь к папке. Так что я не понимаю, что вы подразумеваете под тем, где именно должна быть папка? Затем попробуйте собрать свой проект после создания этой папки и проверьте содержимое. Он должен указать время для сборки. - person Joky; 20.10.2016
comment
Хорошо, имеет смысл. - person keyboard; 21.10.2016

Вы всегда можете попробовать ccache. Хорошо работает в Xcode для меня, если я переопределю CC в настройках проекта. https://ccache.samba.org/

Так, например, установить ccache через brew install ccache. Затем создайте скрипт, который вы храните в системе управления версиями вашего проекта, что-то вроде этого:

#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&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/

person yano    schedule 17.10.2016
comment
Но разве Xcode уже не делает этого? Где вы переопределили CC и на какое значение? Помогает ли это для профилирования или оптимизации? Пожалуйста, дайте немного больше информации о том, что именно вы делаете и чего вы достигаете;) - person keyboard; 18.10.2016
comment
Xcode избегает повторной компиляции файлов, когда это возможно, но ccache фактически выполнит компиляцию из кэша на диске, поэтому даже чистая перекомпиляция будет намного быстрее. Добавил более подробную инструкцию - person yano; 18.10.2016
comment
Я настроил его сейчас, и, кажется, он работает довольно хорошо, но не приносит действительно большого улучшения (пока). У меня есть несколько попаданий в кеш тут и там, но большую часть времени он компилирует новые. Также пробовал поиграться с настройками из статьи. У вас есть дополнительные подсказки для меня? - person keyboard; 19.10.2016
comment
часть этой проблемы может быть связана с тем, что Xcode играет с папкой производных данных. Вы можете попробовать зафиксировать эту папку в определенной позиции, как и в выводе сборки. Я не помню настройки навскидку, но поскольку ccache использует путь к файлу как часть ключа, то, как Xcode управляет вещами, может привести к большему количеству промахов. - person yano; 19.10.2016
comment
Ах да... в этом есть смысл. Может ли это быть что-то с ccache base_dir? Вы установили это на какое-то значение / в производную папку или в исходную папку? - person keyboard; 20.10.2016
comment
да, base_dir может помочь. Вы также можете управлять расположением производных данных в настройках Xcode meandmark. com/blog/2015/08/change-xcodes-build-location - person yano; 20.10.2016