Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Модератор: Модераторы разделов

Ответить
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Сообщение yamah »

Была необходимость собрать программу Trojita? с помощью QMake в QT-Creator. В оригинале сборка идет с помощью CMake.
По структуре pro-файлов trojita (0.2 с чем-то версии) из примеров Qt, сделал pro-файлы для текущей версии (0.7). В исходные коды не лез.
Оба варианта проекта открыл Qt-Creator и там же собрал в режиме релиз. Оба собрались, оба запускаются. В обоих случаях компилируются одинаковый набор статических и динамических библиотек, и исполняемый файл (qmake-ом не собирается только второй исполняемый файл, но его нужность у меня под сомнением). И все бы ничего, но бинарных файлов cmake и qmake сборок в разы отличается в пользу первого. Разница в размерах идет уже на этапе создания объектных файлов.

Попытался из makefile-а удалить все строки на mkspec-и qt. Собралось с теми же размерами.

Или я что-то лишнее задаю в pro-файле? Или qmake сам что-то лишнее в makefile пишет?

Во вложении Cmake-файл проекта, diff-файл версии c qmake-проектом, Makefile-ы вариантов проекта cmake и qmake для libImap.
Вложения
Trojita_Imap.tar.bz2
(74.75 КБ) 28 скачиваний
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Сообщение Bizdelnick »

Видимо cmake у Вас собирает с дебагом, а qmake — без. Чтобы увидеть наверняка, нужны вербозные логи сборки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Сообщение yamah »

Bizdelnick писал(а):
18.01.2017 12:46
Видимо cmake у Вас собирает с дебагом, а qmake — без. Чтобы увидеть наверняка, нужны вербозные логи сборки.

Во вложении логи сборки всего проекта.
make_cmake - лог с makefile-а созданного cmake
make_qmake - лог с makefile-а созданного qmake
cmake - лог выводы cmake

Сборка в обоих случаях проводилась из консоли вызовом соответсвующих утилит.
Вложения
Trojita_Imap.tar.bz2
(22.91 КБ) 31 скачивание
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Сообщение Bizdelnick »

Вероятно, я неправильно понял — в каком случае бинарники получаются больше? В случае qmake фигурирует опция -gdwarf-4, а в случае cmake дебажных опций нет, так что по идее cmake должен делать бинарники меньшего размера.
Можно ещё напрямую посмотреть, какие секции присутствуют в бинарнике, с помощью objdump -h.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Сильно разный размер бинарников при сборке CMake и QMake одной и той же программы

Сообщение yamah »

Так qmake и делает большего размера.

Спасибо за подсказку. Нашел в /usr/lib64/qt5/mkspecs/common/gcc-base.conf

Код: Выделить всё

QMAKE_CFLAGS_OPTIMIZE      = -O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fPIC
QMAKE_CFLAGS_OPTIMIZE_FULL = -O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fPIC

убрал -gdwarf-4, размер сборки сразу стал нормальным.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Ответить