#c #cmake #external-project
#c #cmake #внешний проект
Вопрос:
Я нахожусь в процессе переноса существующей системы сборки C в CMake, и у меня есть вопрос относительно внешних зависимостей проекта.
Сценарий таков, что у нас есть два проекта A и B.
Проект A запускается в googletest как внешний проект с помощью приведенной ниже команды:
ExternalProject_Add(gtest
GIT_REPOSITORY git@github.com:google/googletest.git
GIT_TAG "release-1.8.1"
SOURCE_DIR "${CMAKE_BINARY_DIR}/gtest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/gtest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
Обратите внимание, что проект A зависит от release-1.8.1
googletest .
Теперь проект B запускает googletest с помощью той же команды, но зависит от release-1.7.0
(отличается от зависимости проекта A), А проект B также запускает проект A как другой внешний проект.
Создает ли это какое-то столкновение между версиями googletest при запуске cmake в проекте B?
Комментарии:
1.
Does this create some kind of collision between googletest versions when we run cmake on project B?
— Предполагая, что проекты используют разные имена для ExternalProject (первый аргумент функции), работать с ним не должно быть проблем. Наличие одного и того же имени во внешних проектах вызовет ошибку CMake об идентичных именах целей. Кстати, как насчет того, чтобы просто попробовать вместо того, чтобы спрашивать о возможных конфликтах?2. Вы правы, я довольно ленив, не просто пытаюсь это сделать, но я не за компьютером до следующей недели. Спасибо за ответ. Итак, если мой проект A и проект B попытаются связать с библиотекой в gtest, будет ли эта библиотека собрана дважды и, возможно, с другим кодом?
3. Да, ExternalProject создаст два экземпляра библиотеки в разных местах. (Предполагая, что его
SOURCE_DIR
параметры разные, одинаковые дляBINARY_DIR
).4. у меня есть шанс попробовать это. я получаю ошибки cmake, потому что два экземпляра googletest пытаются создать одни и те же цели (что является конфликтом имен)