Задать вопрос
@Drovosek01

Почему бинарник скомпилированный через CMake весит больше, чем напрямую скомпилированный через clang++?

Недавно начал познавать C++
Пишу не большой проект на macOS 15 ARM, который компилируется в библиотеку .dylib

Сначала все файлы с кодом (.h и .cpp) лежали в папке src и я просто запускал файл ./build.sh, который компилировал необходимый бинарник.

Файлов с кодом стало неудобно много и я решил их разделить на логические группы по директориям внутри src и вопрос использования CMake стал острее.
Сконструировал файл CMakeLists.txt, портировав в него аргументы/команды/флаги из build.sh

Если я компилирую dylib-файл с помощью ./build.sh (там и компиляция и codesign) - файл весит ~257 КБ
Если я компилирую dylib-файл с помощью
cmake -B build -S .
cd build
make
codesign -f --deep -s - *.dylib

файл весит ~273 КБ

Если я из файла main.cpp убираю (закомментирую) большую часть "бизнес-кода" и проведу компиляцию снова, то dylib в обеих случаях весит примерно одинаково 253 КБ

Да, я понимаю, что размер в 17 КБ по современным меркам звучит смехотворно, тем не менее он есть.
А также есть жгучее желание не добавлять дополнительный вес файлов, когда это возможно.

Вот исходники проекта:
https://mega.nz/file/sjQGEZSI#kN9GfXluW7C245CqP46K...
В директории v1 - изначальный вариант, в директории v2- с закомментированной частью кода в main.cpp

Собственно вопрос в заголовке:
Почему бинарник скомпилированный через CMake весит больше, чем напрямую скомпилированный через clang++ ?
  • Вопрос задан
  • 352 просмотра
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Академия Эдюсон
    Разработчик игр на Unreal Engine + ИИ
    9 месяцев
    Далее
  • Stepik
    Профессия: Разработчик C++ (Junior)
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
скорее всего CMake компилирует с другими флагами: без явного CMAKE_BUILD_TYPE оптимизация не включается (-O2/-Os не ставятся). Сравни реальные команды через cmake --build build --verbose и посмотри, чем они отличаются от build.sh. Фиксится: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release, для минимального размера — MinSizeRel.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы