Вот например, есть у вас в одном проекте класс с одинаковым именем, но в разных пространствах имен (и в разных каталогах, разумеется). И не говорите, что так не бывает. Еще как бывает.
Так вот, стандартная опция
set(CMAKE_AUTOMOC ON)будет генерить файлы с одинаковыми именами в каталоге сборки и обязательно приведет к ошибке.
Что делать? Мокать файлы самому. Для этого.
- Установим set(CMAKE_AUTOMOC OFF)
- Определим переменную header set(header ..... ) в которой перечислим необходимые для moc заголовочные файлы.
- Скажем qt5_wrap_cpp(moc ${header})
- В add_library добавим ${moc}
После этих манипуляций cmake будет рад в каталоге сборке создать внутренние служебные каталоги с созданными moc-файлами. Конфликтов имен при такой сборке не будет.