Russian Qt Forum

Компиляторы и платформы => Mac OS X => Тема начата: Авварон от Октябрь 31, 2018, 23:30



Название: Xcode shell script
Отправлено: Авварон от Октябрь 31, 2018, 23:30
В тред призывается Igors. Я вообще ни бум-бум в этом вашем Xcode, но. Я пытаюсь оживить труп и заюзать генератор qbs для Xcode.
Вкратце - он генерит проект, в котором в качестве правила сборки указан shell-скрипт, запускающий qbs.
И вроде бы оно должно работать, но я получаю странную ошибку:

Код:
Showing Recent Messages
:-1: shell script build rule for '/Users/abbapoh/Programming/qt5/alien/qbs/tests/auto/blackbox/testdata-xcodegen/simple-app/main.cpp' must declare at least one output file (in target 'simple-app')

Быстрый гуглеж выдает (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).