Одно и то же имя библиотеки в разных подкаталогах: конфликты при вызове `add_subdirectory` на родительском уровне

простая структура папок похожа на

Root
    CMakeLists.txt
    SubA
        CMakeLists.txt
        some files to be built...
    SubB
        CMakeLists.txt
        some files to be built...

Предполагая, что у меня есть add_library(SubDirLib fooX.cpp) как в SubA/CMakeLists.txt, так и в SubB/CMakeLists.txt, где X — это A и B соответственно, как я могу связать две библиотеки SubA/SubDirLib и SubB/SubDirLib в Root/CMakeLists.txt? Обратите внимание, что это будет конфликт имен, если я позвоню

add_subdirectory(SubA)
add_subdirectory(SubB)

в Root/CMakeLists.txt

У вас нет другого выбора, кроме как назначить имена разные для обеих целей. Почему вы хотите, чтобы эти имена были одинаковыми? (Зная, что мы могли бы дать вам более конкретные советы).

Tsyvarev 24.02.2019 20:14

Я думаю, что это похоже на то, что делает namespace в C++: разработчикам не нужно беспокоиться о конфликтах за пределами локальной области видимости, поскольку вызов всегда может быть направлен на полный путь пространства имен. Один конкретный пример: у нас есть библиотека с именем utils, включающая множество служебных функций в указанной подпапке. Наличие SubA/Utils и SubB/Utils довольно распространено на родительском уровне, не так ли?

victor 24.02.2019 21:40

Нет, в отличие от C++, имена целей в CMake имеют вид Глобальный и должны быть уникальный. Хотя проект предполагается построить как автономный, нет ничего плохого в использовании «общих» имен (например, «utils») для целей. И многие реальные проекты (даже широко используемые) предназначены для создания только как автономные. Но если вы планируете разрешить использовать проект с add_subdirectory, вам нужно сделать его цели уникальными. Например. добавив к ним соответствующий префикс: LibA-utils.

Tsyvarev 24.02.2019 21:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
18
0

Другие вопросы по теме