Xcode не предоставляет отличный способ для этого. В фазе сборки Run Script все, с чем вам нужно работать, - это настройки сборки Xcode, предоставленные вам в среде.
Если вам действительно нужен весь список аргументов до ld
, вы можете использовать хак. С настройками сборки и LDPLUSPLUS
вы можете сделать Xcode своим скриптом, а не реальным ld
. Из этого сценария вы можете захватить аргументы, обратиться к реальному компоновщику и затем делать любую последующую обработку, которая вам нравится, а не в фазе создания сценария запуска.
Вот как вы могли бы сделать это:
Создание .xcconfig для вашей цели.
Он должен выглядеть следующим образом:
LD = $(SRCROOT)/ld-wrapper/clang
LDPLUSPLUS = $(SRCROOT)/ld-wrapper/clang++
SRCROOT указывает на директорию вашего проекта. Линия LDPLUSPLUS требуется только в том случае, если ваше приложение имеет код C++ или ObjC++. Если вы не хотите создавать xcconfig, вы также можете добавить их как пользовательские настройки сборки через интерфейс Xcode.
Создайте сценарии оболочки для вызова Xcode.
Установите скрипт, как это на <your project root>/ld-wrapper/wrapper.sh
:
#!/bin/bash
set -o errexit
# Choose which clang to run (clang or clang++) depending on how we're invoked.
# If we're invoked via the 'clang' link, we'll run 'clang'. If we're invoked
# via the 'clang++' link, we'll run 'clang++'.
CLANG_PATH="$DEVELOPER_DIR"/Toolchains/XcodeDefault.xctoolchain/usr/bin/$(basename "$0")
"$CLANG_PATH" "[email protected]"
echo "clang args: [email protected]"
echo "do any post processing here."
Создание символических ссылок для сценария оболочки для лязга и грохота ++:
cd <project root>/ld-wrapper
ln -s wrapper.sh clang
ln -s wrapper.sh clang++
Вот и все. Это уродливо, но оно работает.
Спасибо @fpotter, рад быть первым, кого вы ответите в SO. Я думаю, что подход с переменной переменной LD интересен. Почему я не могу проанализировать результат 'xcodebuild -dry-run'? – ekeren
Вы, безусловно, можете разобрать вывод «dry-run». Но вызов xcodebuild с 'dry-run' из скрипта запуска будет медленным. Даже если вы делаете сухой запуск, xcodebuild тратит много времени на открытие ваших проектов и подготовку к сборке. На действительно больших проектах, может потребоваться больше минуты, чтобы сделать сухой пробег. – fpotter
У вас есть какая-либо подсказка, почему xcode игнорирует переменную LD и LDPLUSPLUS, когда проект содержит быстрый код? – ekeren