Название: Xcode shell script Отправлено: Авварон от Октябрь 31, 2018, 23:30 В тред призывается Igors. Я вообще ни бум-бум в этом вашем Xcode, но. Я пытаюсь оживить труп и заюзать генератор qbs для Xcode.
Вкратце - он генерит проект, в котором в качестве правила сборки указан shell-скрипт, запускающий qbs. И вроде бы оно должно работать, но я получаю странную ошибку: Код: Showing Recent Messages Быстрый гуглеж выдает (https://stackoverflow.com/questions/52910771/xcode-10-build-error-must-declare-at-least-one-output-file), что ошибка начинается с Xcode 10 (угадайте мою версию по фотографии). Так вот, о чем то бишь я. Чо ему надо-то? Ну добавил я что-то в поле Output Files, он всё равно ругается. Может, есть тут гуру Xcode, кто делал там кастомные шаги? Название: Re: Xcode shell script Отправлено: Igors от Ноябрь 01, 2018, 06:05 Ну кастомные шаги все делают (надо хотя бы залить либы в bundle), но конкретно помочь нечем, т.к. все тяну с обновлением и еще на Xcode 4.6 (пригрелся). Input/Output files роялят только если скрипт ссылается на них, напр "$SCRIPT_INPUT_FILE_0", явно не то. О каких-то "правилах сборки" мне ничего не известно. Есть "Build Phase" - один из шагов билда, если там указаны скрипты - они запускаются. Как получилось что скрипт натравлен на cpp файл (выглядит бессмысленно) - хз
Название: Re: Xcode shell script Отправлено: Авварон от Ноябрь 01, 2018, 10:25 Как получилось что скрипт натравлен на cpp файл (выглядит бессмысленно) - хз Так в том-то и дело что я не понимаю как он связан с cpp файлом. Пора делать богомерзкие скриншоты. https://www.dropbox.com/s/d4ztqpsa31vpes2/xcode1.png?dl=0 Название: Re: Xcode shell script Отправлено: kambala от Ноябрь 01, 2018, 11:15 что, если перетащить кастомный шаг над compile sources?
добавил фейковый скрипт в тестовый проект — нет ошибок. Есть шаги как воспроизвести? может вообще лучше использовать тот же подход, что и qmake при генерации проекта Xcode? Он там делает 2 таргета, из которых первый выполняет препроцессинг, а второй уже собирает; оба используют make-файлы под капотом. Название: Re: Xcode shell script Отправлено: Igors от Ноябрь 01, 2018, 13:38 что, если перетащить кастомный шаг над compile sources? Да, разумно, сначала исходник создать, потом компилитьНазвание: Re: Xcode shell script Отправлено: Авварон от Ноябрь 01, 2018, 15:59 А чо, их можно перетаскивать?? Буду дома, попробую.
Да, у меня была идея сгенерить кумейком проект и посмотреть что он делает. Название: Re: Xcode shell script Отправлено: kambala от Ноябрь 01, 2018, 16:06 А чо, их можно перетаскивать?? Буду дома, попробую. ага, не слишком это интуитивно... :) И даже переименовывать можно)если не выйдет ничего, выложи полный проект, посмотрим. Название: Re: Xcode shell script Отправлено: Igors от Ноябрь 01, 2018, 16:42 А чо, их можно перетаскивать?? Если и нельзя, то вставить новую "Build Phase" и скопировать точно можноНазвание: Re: Xcode shell script Отправлено: Авварон от Ноябрь 01, 2018, 21:00 И правда можно перетаскивать. Правда не помогает.
Вот проект, в папке build сгенеренный проект Xcode. Вряд ли он соберется, но если qbs хотя бы попытается запустится, уже прогресс будет. https://www.dropbox.com/s/6ehfphs81ama32z/simple-app.zip?dl=0 Название: Re: Xcode shell script Отправлено: kambala от Ноябрь 02, 2018, 02:13 завелось :)
для начала скажу, что проект был сгенерирован с абсолютными путями (некруто), поэтому пришлось их заменить в файле build/simple-app.xcodeproj/project.pbxproj проблема оказалась в том, что qbs генерирует еще и Build Rules, и ошибка указывала именно на них. После добавления фейкового выходного файла исходная ошибка пропала (в Xcode 9 ее действительно не было вообще), см. скриншот. далее, файл build/simple-app.xcodeproj/project.xcworkspace/xcuserdata/qbs.xcconfig также содержал абсолютный путь, его я заменил на "$PROJECT_FILE_PATH/project.xcworkspace/xcuserdata/${USER}.xcuserdatad/qbs" (подсмотрел в build/simple-app.xcodeproj/project.xcworkspace/xcshareddata/qbs, хотя туда можно вписывать любой путь, ведь папка xcuserdata не должна попадать под контроль версий), а сам файл сделал симлинком на креаторовский qbs. (*) теперь полезла новая ошибка :) Цитировать /Users/kambala/Development/simple-app/build/simple-app.xcodeproj/project.xcworkspace/xcuserdata/kambala.xcuserdatad/qbs: line 1: \317\372\355\376: command not found которая была устранена в файле build/simple-app.xcodeproj/project.xcworkspace/xcshareddata/qbs с помощью удаления точки из 4-й строки (было почему-то ". $userscript")после этого начало работать, рабочий исполняемый файл появлялся, но в конце выдавало ошибку Цитировать '"/Users/kambala/Development/simple-app/build/simple-app.xcodeproj/project.xcworkspace/xcshareddata/qbs"' not found or is not executable хотя файл там вполне определенно был. Полчаса соображал что не так, пока не дошло, что не надо было заключать путь в кавычки в (*) :)Command /bin/sh failed with exit code 1 Название: Re: Xcode shell script Отправлено: Авварон от Ноябрь 02, 2018, 10:10 О, спасибо! Я думал про билд рулы, но то ли поиск глючит (не находил cpp и с) то ли я криворукий потому я и решил что там нет ничего. Теперь знаю, что править.
Насчет путей - а если юзать относительные, то относительно чего надо указывать путь к qbs? Действительно, может быть удобно добавить сгенеренный проект к контролю версий, но я пока не придумал, как. Название: Re: Xcode shell script Отправлено: kambala от Ноябрь 02, 2018, 11:10 поиск глючит (не находил cpp и с) thisНасчет путей - а если юзать относительные, то относительно чего надо указывать путь к qbs? Действительно, может быть удобно добавить сгенеренный проект к контролю версий, но я пока не придумал, как. relative to project, например. если же не предполагается, что бинарник будет под СКВ, то чтоб он лежал в каком-то стандартном месте (например, /Applications/Qt/Qt Creator.app/Contents/MacOS/qbs). |