Comments 19
Официальная справка очень даже неплохая.
Если нужно что-то конкретное разъяснить — спрашивайте.
Так вот движок может быть разных версий и библиотеки могут предназначаться для разных версий движка. Т.е. при использовании add_subdirectory() нет контроля за версиями и нужно оформлять в виде пакетов и подключать через find_package() и тут я запнулся, ничего понятно. Какие-то разные способы создания пакетов, какие-то конфиги, нигде нет нормального коротенького примера. Еще вопрос по поводу install. Я так понял, он ставит библиотеку в систему, но зачем мне загаживать систему, если все библиотеки используются в пределах одного проекта.
Насколько эти библиотеки независимы?
Если это просто куски проекта, то, вроде, нет необходимости следить за версиями, поскольку и так всё лежит под контролем версий.
Если это реальные модули, то, возможно, имеет смысл отделить их от основного проекта и использовать либо гитовые подмодули, либо, собственно, подключение через CMake. В последнем случае можно использовать модуль FetchContent.
модули могут быть из разных источников и под разные версии движка
Всё это выглядит для меня странно, но могу предложить таки сделать папки полноценными CMake-модулями, которые будут устанавливаться. Просто прописать отдельный путь -DCMAKE_INSTALL_PREFIX=path/to/install
, чтобы не захламлять систему.
Ну вот вы его и нашли. Начинать лучше отсюда: https://habr.com/ru/post/461817/
Вот готовый шаблон: https://github.com/izvolov/mylib
Да я видел уже. Там тоже есть вопросы. Если уж оформлять mylib как отдельную библиотеку, то очевидно ее .h и .cpp должны быть отделены от общей мешанины, а в .cpp должно быть обращение к своим заголовочным файлам как #include ""
, как это во всех библиотеках сделано. И только когда заголовки проинсталлятся, другие библиотеки/приложения будут обращаться к этим заголовкам через #include <>
.
В директории src
можно делать что угодно, т.к. это скрытая часть. В интерфейсе, то есть директории include
, нужно обращаться по <>
.
В любом случае, не вижу проблемы сделать так, как вам нужно.
В интерфейсе, то есть директории include нужно обращаться по <>.
Нет. В директории include к другим заголовкам из той же библиотеки тоже нужно обращаться через "".
Делайте, как хотите. К CMake это отношения не имеет.
Это обосновывает процесс установки. При разработке изолированной библиотеки не будешь же каждый раз при отладке ставить заголовки, поэтому обращение обязательно через ""
. А чтобы другие либы/приложение могли использовать эту либу, ее надо ставить, и тогда они подключают заголовки через <>
.
C++ и CMake — братья навек, часть II