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

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

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

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

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

9 ответов

30 просмотров

Может, функцию сделать для создания либы и в нее передавать список опций, которые в 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 нет приватных инклюд директорий, нет приватных либ

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта