cmake условная компиялция в модуля/библиотеках
От: Chorkov Россия  
Дата: 25.02.22 11:03
Оценка:
Здравствуйте, посоветуйте статьи или пример коды по организации сложного сборочного процесса на cmake.
(Интересуют best practics, а не справочники.)


Что я сейчас не понимаю:

1) Насколько приемлемо писать собственные функции для организации модулей/библиотек?
Например, VTK, использует vtk_module_add_module, совместно с файлом vtk.module, в каждой папке, для организации разбиения на модули/библиотеки, вместо add_library.
Хотя, VTK разрабатывает та же компания что и cmake, и я ожидал эталонного кода. Если не хватает каких-то возможностей в add_library они вполне могли их добавить сами...

2) Что делать если для сборки модуля необходима информация, которая будет доступна только на уровне конечного приложения.
Например: информация о типе приложения (qt-gui/console/...), об имени приложения, о наличии других конкретных модулей в составе приложения...
Re: cmake условная компиялция в модуля/библиотеках
От: kov_serg Россия  
Дата: 25.02.22 15:22
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Здравствуйте, посоветуйте статьи или пример коды по организации сложного сборочного процесса на cmake.

C>(Интересуют best practics, а не справочники.)
А книги не пойдут? (Chapter 28. Project Organization)
Re[2]: cmake условная компиялция в модуля/библиотеках
От: Chorkov Россия  
Дата: 25.02.22 17:26
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Chorkov, Вы писали:


C>>Здравствуйте, посоветуйте статьи или пример коды по организации сложного сборочного процесса на cmake.

C>>(Интересуют best practics, а не справочники.)
_>А книги не пойдут? (Chapter 28. Project Organization)


Как-раз эту книгу я сегодня закончил читать.
Как обзор возможностей и синтаксиса — она хороша.
Ответа на свои два вопроса я не нашел. (Или не понял, что это ответ именно на этот вопрос. )
Re: cmake условная компиялция в модуля/библиотеках
От: Skorodum Россия  
Дата: 04.04.22 08:59
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>1) Насколько приемлемо писать собственные функции для организации модулей/библиотек?

C>Например, VTK, использует vtk_module_add_module, совместно с файлом vtk.module, в каждой папке, для организации разбиения на модули/библиотеки, вместо add_library.
Мы тоже так делаем. В нашем случае причина следующая: есть плагины/модули которые подключаются в зависимости от опций сборки, а опций сборки очень много (разные конфигурации, платформы, компиляторы и т.п.), при этом вызывать два раза add_library для одного и того же модуля нельзя. Тут два выхода:
1. Сложная многоуровневая проверка всех условий

if (USE_A && USE_B && ...)
if(asdf and not asdf_asdf...)
add_library(foo)
add_library(bar)
else()
...
endif()
endif()


2. Использовать обертку над add_library, которую можно вызывать несколько раз

if (USE_A)
add_library(foo)
endif()

if (USE_A && USE_B)
my_add_library(foo)
my_add_library(bar)
endif()



C>Хотя, VTK разрабатывает та же компания что и cmake, и я ожидал эталонного кода. Если не хватает каких-то возможностей в add_library они вполне могли их добавить сами...

В этом главная беда cmake: нет (или гугл не находит) эталонный кода даже для довольно простых задач.

C>2) Что делать если для сборки модуля необходима информация, которая будет доступна только на уровне конечного приложения.

C>Например: информация о типе приложения (qt-gui/console/...), об имени приложения, о наличии других конкретных модулей в составе приложения...
target_compile_definitions + PUBLIC?
cmake
Re[2]: cmake условная компиялция в модуля/библиотеках
От: DiPaolo Россия  
Дата: 15.05.22 10:39
Оценка:
S>Мы тоже так делаем. В нашем случае причина следующая: есть плагины/модули которые подключаются в зависимости от опций сборки, а опций сборки очень много (разные конфигурации, платформы, компиляторы и т.п.), при этом вызывать два раза add_library для одного и того же модуля нельзя. Тут два выхода:
S>1. Сложная многоуровневая проверка всех условий
S>

S>if (USE_A && USE_B && ...)
S> if(asdf and not asdf_asdf...)
S> add_library(foo)
S> add_library(bar)
S> else()
S> ...
S> endif()
S>endif()


А почему бы не включать/выключать такой модуль/плагин целиком:
if (USE_A)
    add_subdirectory(module_a_dir)
endif()

if (USE_B)
    add_subdirectory(module_b_dir)
endif()
Патриот здравого смысла
Отредактировано 15.05.2022 10:39 DiPaolo . Предыдущая версия .
Re[3]: cmake условная компиялция в модуля/библиотеках
От: Skorodum Россия  
Дата: 16.05.22 08:17
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>А почему бы не включать/выключать такой модуль/плагин целиком:

DP>
DP>if (USE_A)
DP>    add_subdirectory(module_a_dir)
DP>endif()

DP>if (USE_B)
DP>    add_subdirectory(module_b_dir)
DP>endif()
DP>


Потому что "USE_A" и "USE_B" могут иметь взаимо-зависимости. Представьте, как будет выглядеть ваш пример, если USE_A, требует USE_B.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.