Cmake: несколько проектов, использующих собственную цель для тестирования

Скажем, у меня есть библиотека ProjectA где я определил пользовательскую цель build-tests в моем CMakefile, чтобы построить мои тесты, чтобы я мог сделать make test после этого. (увидеть CMake & CTest: make test не создает тесты).

Затем у меня есть вторая библиотека ProjectB это зависит от ProjectA, Я использую подмодуль git, так что я могу сделать add_subdirectory(ProjectA) в ProjectBCMakefile. Проблема в том, что я хотел бы сделать то же самое: определить пользовательскую цель build-tests построить тесты ProjectB но я не могу, потому что это уже было определено в ProjectA

Моя проблема похожа на Как справиться с транзитивным конфликтом зависимостей, используя подмодули Git и CMake? а также CMake и использование git-submodule для зависимых проектов но они могут определить одну цель, чтобы избежать этого, в то время как я хотел бы иметь возможность сделать make build-tests в ProjectA И в ProjectB,

Итак, есть ли способ, например, определить локальную цель для проекта cmake? или есть умный способ сделать то, что я хотел бы сделать? (что кажется вполне естественным)

1

Решение

Итак, есть ли способ, например, определить локальную цель для проекта cmake? или есть умный способ сделать то, что я хотел бы сделать? (что кажется вполне естественным)

Для вас работают с пользовательскими целями, вероятно, ALLOW_DUPLICATE_CUSTOM_TARGETS могу сделать работу.
Документация действительно достаточно ясна:

Разрешить создание дубликатов пользовательских целей.

Если вы пойдете немного дальше, вы обнаружите, что:

Свойство позволяет несколько add_custom_target Команда вызывает в разных каталогах, чтобы указать одно и то же имя цели.

К сожалению, это также имеет некоторые ограничения:

[…] установка этого свойства приведет к тому, что не-Makefile-генераторы выдадут ошибку и откажутся генерировать проект.

Внимательно прочитайте документацию (см. Ссылку выше), чтобы узнать, подходит ли она для ваших целей.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]