Russian Qt Forum
Декабрь 04, 2023, 08:40
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
cmake и конфигурация сборки и линковки через json
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: cmake и конфигурация сборки и линковки через json (Прочитано 3529 раз)
SektorCT
Самовар
Offline
Сообщений: 196
cmake и конфигурация сборки и линковки через json
«
:
Июнь 10, 2023, 14:37 »
Всем привет.
Такой вопрос, для cmake можно в файле CMakePresets.json прописать определенные настройки, и при выборе проект будет собираться по данным правилам.
Вопрос: можно ли через такие настройки указать например в одном случаи мне нужна линковка в одним набором модулей, а в другом случаи с другим?
Еще в проекте присутствуют паблик и приват файлы, и с ними тоже надо работать.
То есть возможна ли гибкость переключения сборки?
Может кто сталкивался с подобным.
Заранее спасибо.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #1 :
Июнь 11, 2023, 22:57 »
да, сделай два пресета, в которых будет отличаться какая-то твоя опция, на основании которой будешь выбирать какие модули использовать. эти два пресета можно унаследовать от общего.
про переключение непонятно. это вопрос про какую-то конкретную Иде?
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Самовар
Offline
Сообщений: 196
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #2 :
Июнь 12, 2023, 16:16 »
Цитата: kambala от Июнь 11, 2023, 22:57
да, сделай два пресета, в которых будет отличаться какая-то твоя опция, на основании которой будешь выбирать какие модули использовать. эти два пресета можно унаследовать от общего.
про переключение непонятно. это вопрос про какую-то конкретную Иде?
Вообще выбор того пресета который нужен это как минимум работает в QtCreator, CLion, VS. про другие не знаю.
Проблема в проекте то что приходится генерировать и вытаскивать публичные хедеры в зависимости от того какой проект нужен, потом линковка с модулями. Я же хочу найти способ как без ... генерации через пресеты переключать нужные варианты сборки и линковки.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #3 :
Июнь 12, 2023, 17:15 »
все равно не особо понятно в чем проблема. можешь на синтетическом примере продемонстрировать?
со своей опцией у тебя просто будет 2 отдельных папки сборки, например:
Код:
# 1
cmake -S . -B ../build1 -D MYOPTION=ON
# 2
cmake -S . -B ../build2 -D MYOPTION=OFF
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Самовар
Offline
Сообщений: 196
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #4 :
Июнь 14, 2023, 09:02 »
Цитата: kambala от Июнь 12, 2023, 17:15
все равно не особо понятно в чем проблема. можешь на синтетическом примере продемонстрировать?
со своей опцией у тебя просто будет 2 отдельных папки сборки, например:
Код:
# 1
cmake -S . -B ../build1 -D MYOPTION=ON
# 2
cmake -S . -B ../build2 -D MYOPTION=OFF
Смотрите, я хочу понять как сделать например включение или выключение сборки каких то таргетов, ключение многопоточного билда как для gcc, так и в случаи если сборка идет в мелкомягкой через MSVC(это вообще не понятно как работает и как это задать). Но самое главное это переключенеи таргетов.
Я написал лайт вариант с которым можно попробовать сделать такой пример,могу послать.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #5 :
Июнь 14, 2023, 11:21 »
все это через опции (необязательно булевые) решается, например:
Код:
option(MYOPTION "Some bool option" OFF)
# ...
if(MYOPTION)
add_subdirectory(extra_target1_dir)
add_subdirectory(extra_target2_dir)
add_compile_definitions(MYOPTION=1)
else()
add_subdirectory(extra_target3_dir)
endif()
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Самовар
Offline
Сообщений: 196
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #6 :
Июнь 14, 2023, 14:19 »
Цитата: kambala от Июнь 14, 2023, 11:21
все это через опции (необязательно булевые) решается, например:
Код:
option(MYOPTION "Some bool option" OFF)
# ...
if(MYOPTION)
add_subdirectory(extra_target1_dir)
add_subdirectory(extra_target2_dir)
add_compile_definitions(MYOPTION=1)
else()
add_subdirectory(extra_target3_dir)
endif()
Так можно, но как оказалось никто не хочет чет менять аля опции в нужной ситуации. Нужно через пресеты, то есть выбрал нужный и он переконфигурировал.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #7 :
Июнь 14, 2023, 18:55 »
ну так эту опцию в пресет и впиши
Цитата: kambala от Июнь 11, 2023, 22:57
да, сделай два пресета, в которых будет отличаться какая-то твоя опция, на основании которой будешь выбирать какие модули использовать. эти два пресета можно унаследовать от общего.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Самовар
Offline
Сообщений: 196
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #8 :
Июнь 14, 2023, 22:23 »
Цитата: kambala от Июнь 14, 2023, 18:55
ну так эту опцию в пресет и впиши
Цитата: kambala от Июнь 11, 2023, 22:57
да, сделай два пресета, в которых будет отличаться какая-то твоя опция, на основании которой будешь выбирать какие модули использовать. эти два пресета можно унаследовать от общего.
Вот мой минимальный пресет, как в него добавить?
Код:
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 22,
"patch": 0
},
"configurePresets": [
{
"name": "Client",
"description": "Build only one project Client",
"generator": "Ninja",
"binaryDir": "build-client",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": {
"type": "STRING",
"value": "ON"
},
"BOARD": {
"type": "STRING",
"value": "<default>"
},
"BUILD_CLIENT": {
"type": "STRING",
"value": "ON"
},
"CMAKE_BUILD_TYPE": {
"type": "STRING",
"value": "Debug"
}
}
}
]
}
И сразу вопрос, как сюда можно добавить указание для MSVC билдить например в 8 потоков?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #9 :
Июнь 14, 2023, 23:22 »
не надо бояться документации
https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
добавь новую переменную в cacheVariables
для многопоточной сборки надо добавить buildPresets и использовать поле jobs. если у тебя генерируется проект для студии, то msbuild должен собирать параллельно по умолчанию, насколько я помню.
вижу, у тебя генератор Ниндзя, так она по умолчанию тоже параллельно собирает.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Самовар
Offline
Сообщений: 196
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #10 :
Август 03, 2023, 11:18 »
Добрый день.
В общем при разборе того что надо было переписывать оказалось небольшое недопонимание.
У VS есть какой то функционал для MSbuilder что какие то проекты могут быть load а какие то unload.
Именно это и надо было найти.
И может я ошибаюсь но разве это не тоже самое что конфигурация через пресеты cmake?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4698
Re: cmake и конфигурация сборки и линковки через json
«
Ответ #11 :
Август 03, 2023, 13:02 »
пресеты задают всякие cmake параметры, типа твоих кастомных переменных, флажков компиляции и т.д., чтоб не писать их вручную в терминале
если ты не добавишь папку проекта через add_subdirectory, то ее в солюшене вообще не будет. как сделать чтоб проект там был, но был unload или чтоб не собирался по умолчанию я не знаю, это надо курить доку cmake касательно студийно-специфических переменных/свойств (а то и вовсе вручную править сгенерированный файл солюшена/проекта)
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...