Сегодня узнал об очень удобной возможности автоматизировать действия при сборке проекта.
Предыстория:
Мне не хочется, чтобы разные проекты зависели от их относительного расположения на диске. При этом я хочу, чтобы заголовки всех моих библиотек (как и сами бинарники) всегда лежали в одном и том же месте, независимо от того, где находятся сами проекты библиотек.
Что я хочу автоматизировать:
В моей ситуации нужно копировать только некоторые заголовочные файлы в определённое место (например, в папку /MyLibs/include/QuartzDrawingLib/).
Раньше я делал это вручную (рискуя однажды забыть скопировать обновлённые заголовки, что порождает множество непредсказуемых проблем из-за несоответствия библиотеке устаревшим заголовкам).
Как это можно сделать?
1-й способ (через добавление скрипта):
Посмотрите на дерево Xcode-проекта. Там есть ниже всех исходников Targets (с иконкой, напоминающей красную мишень). Выберите в Targets вашу цель (как правило с названием вашего проекта), нажмите на неё правой кнопкой мыши и выберите из контестного меню Add - > New Build Phase - > New Run Script Build Phase.
После этого появится окно, в которое нужно ввести текст скрипта. Туда вообще можно вводить любые команды, которые вы могли бы вручную набрать в консоли.
Я ввёл примерно следующее:
destDir=/MyLibs/include/QuartzDrawingLib/
if [ -d "$destDir" ]
then
echo "Directory "$destDir" is found"
else
echo "Directory "$destDir" will be created"
mkdir "$destDir"
if [ -d "$destDir" ]
then
echo "Directory "$destDir" is created"
else
echo "Directory "$destDir" is not created!"
echo "Exit script..."
exit 1
fi
fi
echo Copying headers...
cp Classes/SomeClass1.h $destDir
cp Classes/SomeClass2.h $destDir
cp Classes/SomeClass3.h $destDir
cp Classes/SomeClass4.h $destDir
cp Classes/SomeClass5.h $destDir
и так далее (из папки Classes в текущей директории копируются все ТОЛЬКО НУЖНЫЕ МНЕ заголовки в корень системного диска в папку /MyLibs/include/QuartzDrawingLib/
Теперь не нужно это делать каждый раз вручную.
Всё тоже самое можно сделать ВНЕ ПРОЕКТА как отдельный исполняемый скрипт (в виде обычного текстового файла), только перед написанием всех команд не забудьте сверху написать #!/bin/bash
Кроме того, после написания скрипта (т.е. текстового файла ВНЕ ПРОЕКТА) нужно данный текстовый файл сделать исполняемым - для этого выполните в консоли команду:
chmod +x NameOfScriptFile
2-й способ (который значительно проще, но менее надёжный, так как не гарантирует обновление имеющихся копий заголовков, т.е. их приходится удалять и снова нажимать кнопку Build):
Выберите в Targets вашу цель (как правило с названием вашего проекта), нажмите на неё правой кнопкой мыши и выберите из контестного меню Add - > New Build Phase - > New Copy Files Build Phase (после появления новой иконки добавленной фазы, в настройках этой фазы можно указать абсолютный путь куда копировать те файлы, которые вы будете добавлять в эту фазу в дереве проекта).
Hе забывайте, что с помощью скриптов вы можете автоматически выполнять множество других действий, а не только копировать заголовочные файлы.
пятница, 30 апреля 2010 г.
Как автоматически копировать нужные заголовки в нужное место при сборке Xcode-проекта
Ярлыки:
автоматизация,
автоматически,
заголовки,
копировать,
проект,
сборка,
скрипт,
header,
headers,
script,
shell,
xcode
Подписаться на:
Комментарии к сообщению (Atom)
Постоянные читатели
Архив блога
-
▼
2010
(55)
-
▼
апреля
(28)
- Стив Джобс рассказал, почему Apple "не пускает" Fl...
- Работа с локальным SVN-репозитарием
- Как в Mac OS снять блокировку/защиту из всех файло...
- Как получить пути к наиболее часто используемым па...
- Как автоматически копировать нужные заголовки в ну...
- Чем заменить функцию stricmp в iPhone-проекте
- Легендарный редактор vi
- Как выяснить причину EXC_BAD_ACCESS в Xcode
- Что делать, если в Xcode-отладчике невозможно пере...
- Как изменить размер стека потока средствами pthrea...
- Интересные материалы для C++ программистов в блоге...
- Принципы Agile Software Development
- Знакомство с компилятором GCC
- Антипаттерны
- man xcodebuild (справка по команде)
- Как сделать скрипт для компиляции и линковки сразу...
- Какой аналог у SetEvent (Win32) в pthread?
- Pthread Condition Variables и Windows Events (Креа...
- Шпаргалка по TinyXML
- Мои любимые книги по программированию
- Из блога Сергея Меднова: Знает ли Apple, для чего ...
- Вопросы на проверку знания языка C++
- Использование pthread (POSIX) функций для многопот...
- Xcode — странные выходки отладчика
- Проблемы со статическими библиотеками при разработ...
- Переименование Xcode-проекта и приложения (для iPh...
- Как совмещать C++ и Objective C код в одном файле ...
- Как удалить badge-кружочки из TabBar вкладок
-
▼
апреля
(28)
Комментариев нет:
Отправить комментарий