2015-02-02 2 views
8

Как определить, какие аргументы команды ld в процессе сборки будут выполняться внутри скрипта, запущенного как «запустить этап сборки сценария»?вычислять аргументы команды ld из этапа сборки сценария запуска xcode

В качестве опции я искал xcodebuild -dry-run, но тогда мне нужно понять, какие аргументы я должен предоставить.

Любая идея для надежного решения?

EDIT:

Кажется, что xcodebuild не поддерживает LD и LDPLUSPLUS, когда проект включает в себя быстрый исходный код. Таким образом, решение, предлагаемое @fpotter, не работает с проектом с быстрым.

Любые мысли?

ответ

5

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++ 

Вот и все. Это уродливо, но оно работает.

+0

Спасибо @fpotter, рад быть первым, кого вы ответите в SO. Я думаю, что подход с переменной переменной LD интересен. Почему я не могу проанализировать результат 'xcodebuild -dry-run'? – ekeren

+0

Вы, безусловно, можете разобрать вывод «dry-run». Но вызов xcodebuild с 'dry-run' из скрипта запуска будет медленным. Даже если вы делаете сухой запуск, xcodebuild тратит много времени на открытие ваших проектов и подготовку к сборке. На действительно больших проектах, может потребоваться больше минуты, чтобы сделать сухой пробег. – fpotter

+1

У вас есть какая-либо подсказка, почему xcode игнорирует переменную LD и LDPLUSPLUS, когда проект содержит быстрый код? – ekeren

Смежные вопросы