Конфликты зависимостей CMake ExternalProject

#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 пытаются создать одни и те же цели (что является конфликтом имен)