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

Может кто-нибудь объяснить что же на самом деле делают ключевые

слова PUBLIC, INTERFACE и PRIVATE в команде target_link_library? Как запилить базовый пример, который демонстрировал бы явные различия?

12 ответов

25 просмотров

все гуглится, особенно это видео https://www.youtube.com/watch?v=8hoZpwDMVME&list=PL6x9Hnsyqn2UwWjSvjCzAY6sEOBrHY7VH&index=7

Это про транзитивные зависимости

eugene-martein Автор вопроса
Kirill
все гуглится, особенно это видео https://www.youtu...

Какие ограничения накладывает PRIVATE? Он не может запретить мне вызвать что либо из либ, которые подключаются через PRIVATE, как бы глубоко они не были спрятаны в нижележащих проектах. Я хочу увидеть именно ограничения, накладываемые PRIVATE или тут речь только о пересборке, в случае вносимых изменений?

eugene-martein Автор вопроса
Kirill
все гуглится, особенно это видео https://www.youtu...

На 1:56 он нагло врёт про то, что myexe ничего не знает о libB. Знает, и я могу дёргать методы классов либы libB.

eugene martein
Какие ограничения накладывает PRIVATE? Он не может...

Он позволяет вызвать ровно то из нижележащей либы, что она определила как не-private. То, что у неё private - вы никак не увидите. Можно для иллюстрации экспортировать такую либу и посмотреть в свойства экспорт-файла. Увидите там её объявление (как static/dynamic, либо unknown); её файлы/папки; её зависимости (interface)- но ни следа от private-зависимостей. Дальше уж как попрёт - если будут две разные версии одной либы (тот же буст) в приватах разных либ, и если будет конфликт имён - увидете это в ошибке линкера. Но cmake тут уже не причём; сами либы при билде выбирают, экспортить ли ВСЕ символы наружу, или только избранные. Если прямо все - то две версии разных приватных либ могут между собой поругаться.

eugene-martein Автор вопроса

Ничего мне не запрещает вызывать символы ниже лежащих проектов, объявленных private и более того даже нет конфликта имён. Допустим, есть у меня проект myExe, который подключает libA, который подключает libB. Если у меня в libB будет определена функция void foo() в myExe и в libB, то при вызове из myExe произойдёт вызов определения из myExe. Если я уберу определение void foo(), то вызов произойдёт версии из libB. Никаких конфликтов.

eugene-martein Автор вопроса
Alex Noname
Ужас. Нарушил odr

Что такое нарушение ODR?

eugene martein
Что такое нарушение ODR?

https://en.m.wikipedia.org/wiki/One_Definition_Rule

eugene-martein Автор вопроса
Alex Noname
Ужас. Нарушил odr

[build] [ 33%] Built target libB [build] [ 66%] Built target libA [build] [ 83%] Linking CXX executable myApp.exe Всё слинковалось, так?

eugene-martein Автор вопроса
Kirill
все гуглится, особенно это видео https://www.youtu...

И всё равно из этого примера не понятно чем отличается PRIVATE от PUBLIC.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта