Подтвердить что ты не робот

Зависимости интерфейса CMake target_link_libraries

Я новичок в CMake и немного путаюсь с ключевыми словами PUBLIC, PRIVATE и INTERFACE, связанными с target_link_libraries(). В документации упоминается, что их можно использовать для указания зависимостей ссылок и интерфейса ссылок в одной команде.

Что на самом деле означают зависимости ссылок и интерфейс ссылок?

4b9b3361

Ответ 1

Если вы создаете общую библиотеку и исходные файлы cpp #include заголовки другой библиотеки (скажем, QtNetwork, например), но ваши файлы заголовков не включают заголовки QtNetwork, то QtNetwork - это зависимость PRIVATE.

Если исходные файлы и заголовки содержат заголовки другой библиотеки, то это зависимость PUBLIC.

Если ваши файлы заголовков, но не исходные файлы, содержат заголовки другой библиотеки, то это зависимость INTERFACE.

Другие свойства сборки зависимостей PUBLIC и INTERFACE распространяются на библиотеки потребления. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements