LINUX.ORG.RU

cmake разделение проекта

 


0

2

Всем привет, не могу вкурить, почему после разделения проекта(представляющего одну либу) по таргетам(OBJECT, не шаред или статик) сильно увеличивается время генерации, т.е. после стадии конфигурации и между началом этапа компила. В то же время, если сорцы не объединять в таргет, а просто тупо сразу включить их в конечную либу, на генерацию время не тратится практически вообще, в чём может быть дело? Я конечно понимаю, что создание таргета это накладные расходы, но не настолько же, что без него практически 0, а с ним 100сек. А сорцы одни и те же и результат. От таргетов не хочется отказываться, т.к. экономит время ребилда, если меняется только таргет.

ЯННП. Какая генерация? какие 100 секунд? Всегда так делаю, все работает быстро, брат жив.

anonymous
()
Ответ на: комментарий от peregrine

В проекте 3 тыщи файлов исходников, компилится часа пол с нуля, поэтому конфиг + ген = 100сек я бы понял, если бы не одно но, что если не разделять по таргетам, а тупо вставить сорцы в итоговую либу, этот этап проскакивает моментально. Всё банально, вот к примеру

корневой CMakeLists.txt:

...
ADD_LIBRARY(${PROJECT_NAME} SHARED <TARGET_OBJECTS:FIRST_PART_OF_LIBRARY>)
ADD_SUBDIRECTORY(first_part_of_library)
...

В подпроекте first_part_of_library CMakeLists.txt:

...
ADD_LIBRARY(${PROJECT_NAME} OBJECT ${FIRST_PART_OF_LIBRARY_SRCS})
...

И это всё выливается в 100сек конфига + гена.

В то же время вариант корневого CMakeLists.txt:

...
ADD_LIBRARY(${PROJECT_NAME} SHARED ${FIRST_PART_OF_LIBRARY_SRCS})
...

выполняется секунды за 3.

Один таргет для примера, в проекте их десятки. Но проверка самого большого дала +-30 сек. Т.е. явно не от количества таргетов зависит, а от их объёма, но какого ***???))

freemanensung
() автор топика
Ответ на: комментарий от freemanensung

И это всё выливается в 100сек конфига + гена.

Выложи работающий пример, на котором проявляется проблема, пожалуйста. В моей практике никогда ничего подобного не встречалось.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Эм... один в один как я описал выше, сами сорцы яж сюда не смогу выложить. А структура cmake чётко именно такая же, стоит убрать создание таргета и переместить из него сорцы сразу в итоговую либу и всё сразу шустро. Я надеялся кто-нибудь сталкивался, если не - над будет тогда разрабам cmake-a черкнуть.

ЗЫ: из знаменитого манула cmake performance tips я перепробовал всё, с помощью ninja удалось сократить время немного, но проблема всё равно осталась.

freemanensung
() автор топика
Ответ на: комментарий от freemanensung

ADD_LIBRARY(${PROJECT_NAME} OBJECT ${FIRST_PART_OF_LIBRARY_SRCS})

Разве в ${PROJECT_NAME} будет «FIRST_PART_OF_LIBRARY»? По-моему, надо так:

ADD_LIBRARY("FIRST_PART_OF_LIBRARY" OBJECT ${FIRST_PART_OF_LIBRARY_SRCS})
Sorcerer ★★★★★
()
Ответ на: комментарий от freemanensung

А точно нужно это как подпроект оформлять? Может быть, просто как библиотеку внутри текущего проекта? А то проект с выходными данными - кучей объектников - странно как-то смотрится.

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

Да, любой таргет, проседание в этапе генерации и конфига происходит как только мы выделяет любые сорцы в отдельный таргет, если этого не делать - просеста нет. Такое впечатление, что при определении части сорцов как таргета cmake не просто создаёт пару дополнительных дир и связей, а грохает там огого чего-то лишнего. Либо в кэшах держит только сгенерированный корень, а таргеты каждый раз перегенерирует...

freemanensung
() автор топика
Ответ на: комментарий от freemanensung

Попробуйте всё-таки не делать подпроекты, если это не принципиально. Т.е. всё как сейчас, но PROJECT() - только в корне, а в поддиректориях - либы (объектники или статические - всё равно).

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

Это первое, что я пробовал) и в одном симейке без поддиректорий совсем я тоже пробовал) тот же самый эффект, говорю же - такое происходит как только я создаю отдельную сущность таргет, а не прямиком подключаю сорцы из таргета. Т.е. это либо бага, либо таргет - это гораздо больше, чем мы думаем внутрях симейка.

freemanensung
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.