207 похожих чатов

Подскажите по cmake Есть библиотека, объявленная через add_library(LIBRARY_ONE STATIC много-исходники). На

библиотеку навешано куча свойств, она линкуется с кучей других библиотек, подцепляет свои include directories и target_compile_definitions...

Так вот, хочется сделать другую библиотеку, LIBRARY_TWO. Все свойства и исходники должны совпадать с LIBRARY_ONE, но должен быть другой target_compile_definitions

Как это правильнее/проще сделать? Как скопировать таргет и поменять одно свойство сборки

9 ответов

8 просмотров

Может, функцию сделать для создания либы и в нее передавать список опций, которые в target_compile_definitions должны заехать?

🐙 Antony-Polukhin Автор вопроса

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

С какого-то смака кажется уже поддерживает

перевернуть архитектуру проекта с головы на ноги, чтобы таким не приходилось заниматься 🙃 Но поскольку по собственному опыту, в таких случаях кажется, что проблемы у симейка а не у автора кода, то примерно как говорили выше: set(FOO_SRC foo.cpp) set(FOO_LIBS PRIVATE boost_system PUBLIC boost_asio) set(FOO_DEFINES PUBLIC TAXI_VERSION=3) set(FOO_FLAGS PRIVATE -Werror) add_taxi_library(foo STATIC SOURCES ${FOO_SRC} LIBS ${FOO_LIBS} DEFINES ${FOO_DEFINES} FLAGS ${FOO_FLAGS} ) set(BAR_SRC ${FOO_SRC}) set(BAR_LIBS ${FOO_LIBS}) set(BAR_FLAGS ${BAR_FLAGS}) set(BAR_DEFINES ${FOO_DEFINES} MARKET_VERSION=4) add_taxi_library(bar STATIC SOURCES ${BAR_SRC} LIBS ${BAR_LIBS} DEFINES ${BAR_DEFINES} FLAGS ${BAR_FLAGS} ) практика показывает, что копирование свойств — феерически хрупкая штука, а создание подкапотных таргетов типа __foo_bar_common — мина замедленного действия до первого же if (MSVC) add_compile_options(foo ...) endif(), после которого флажки между foo и bar разъедутся

Не сработает ли создание интерфейсной библиотеки, для которой заданы все свойства (кроме compile definitions), которая будет уже линковаться как зависимость к двум нужным таргетам, для которых уже можно по отдельности выставить target_compile_definitions?

🐙 Antony-Polukhin Автор вопроса

у INTERFACE нет приватных инклюд директорий, нет приватных либ

Как альтернатива — иметь две интерфейсных либы, одну из которых линковать как публичную, а другую как приватную. Но я не знаю, какие тут подводные камни есть помимо не самой большой чистоты решения

Да, имелось ввиду второе

Понятно. Красивое решение

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

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Карта сайта