MyTetra Share
Делитесь знаниями!
Как запретить запускать strip у не-бинарных файлов при сборке проекта Qt?
Время создания: 16.12.2024 10:43
Текстовые метки: linux, qt, qt4, qt5, strip, файл, сборка, проект, запретить, заблокировать
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Инсталляция Qt и сборка проектов
Запись: xintrea/mytetra_syncro/master/base/1734335020wwsqbxwix3/text.html на raw.github.com

Часто можно заметить, что если в Qt-проекте имеются файлы (xml, svg, qrc, bash, py и т.д.) то при сборке проекта, если данные файлы были перечислены через переменные .files / .path переменной INSTALLS, то в итоговый Makefile попадают команды strip, которым скармливаются в качестве параметра такие файлы. Естественно, эти команды завершаются ошибкой, потому что strip работает с исполняемыми бинарными ELF-файлами, но никак не с другими форматами:



strip:/home/user/work/develop/cpp/ourProject/resources/icons.qrc:

Формат файла не распознан

Makefile:230: ошибка выполнения рецепта для цели «install_icons»

make: [install_icons] Ошибка 1 (игнорирование)



Как избавиться от такого поведения?



Вариант 1


Сразу можно дать самое универсальное решение. Дело в том, что команды strip формируются только для файлов, у которых изначально стоит бит исполнения. Поэтому первый способ - проверить права на файлы, и если у них есть бит исполнения для пользователя/группы/других, то снять этот бит, например командой: chmod 644 file.xml. Этот бит в Linux-системах может появиться у файлов при копировании с файловых серверов Samba, при копировании с CD-диска, при копировании с примонтированных USB-флешек, поэтому его необходимо снимать.



Вариант 2


Однако, не всегда можно снять бит исполнения. Например, если в составе проекта есть какие-нибудь bash/pythoon/php/perl скрипты, которые должны работать в момент разработки. В этом случае надо понять, действительно ли есть необходимость держать их с исполняемым битом. Может быть, их можно в самом проекте хранить без бита исполнения, а устанавливать его после копирования файлов через .files / .path, используя команды, прописанные в .extra для этой же группы файлов.



Вариант 3


В документации Qt 5.15 была обнаружена следующая информация:



INSTALLS has a .CONFIG member that can take several values


nostrip - If set, the typical Unix strip functionality is turned off and the debug information will remain in the binary.



Однако найти пример использования в интернете оказалось невозможно. Поэтому невозможно понять, что имеют в виду авторы:



INSTALLS.CONFIG += nostrip



или



ourIcons.files = icons/*

ourIcons.path = $${PWD}/../installPackage

ourIcons.CONFIG = nostrip

INSTALLS += ourIcons



Если первый вариант, то он отключает strip для всего проекта, что не всегда допустимо. Если второй вариант, то strip отключается для группы файлов, что именно то что нужно. Осталось понять, что имеют в виду авторы qmake.


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования