Допустим, у меня есть приложение Qt, в котором у меня есть два класса с одинаковым именем в двух разных пространствах имен:
namespace namespace1
{
class SomeClass;
}
namespace namespace2
{
class SomeClass;
}
и у меня есть структура каталогов проекта в соответствии с ним:
-->src/
-->namespace1/
-->someclass.cpp
-->namespace2/
-->someclass.cpp
Когда я компилирую приложение с qmake помещает все объектные (.o) файлы в один каталог - поэтому сначала он создает файл someclass.o , а затем перезаписывает его вторым someclass.o , который является файлом коллизия имен, так это плохо.
Почему qmake не принимает во внимание структуру каталогов исходных файлов и почему он не создает что-то вроде namespace1_someclass.o и namespace2_someclass.o ?
Да, Я могу поместить свои классы в один каталог и назвать их namespace1_someclass.cpp и namespace2_someclass.cpp , и конфликтов имен не будет, но это вызывает небольшие неудобства при просмотре исходных файлов в обозреватель проекта в Qt Creator, потому что, когда в проекте много исходных файлов, он гораздо менее читабелен, чем если бы была структура каталогов , которую я могу развернуть или свернуть.
Еще одна крайность - иметь такую структуру каталогов:
-->src/
-->namespace1/
-->namespace1_someclass.cpp
-->namespace2/
-->namespace2_someclass.cpp
, которая разрешает конфликт имен, но избыточно дублирует имена пространств имен - и, следовательно, снова менее читабельна.
Почему qmake не имеет хотя бы опции для помещения объектных файлов в структуру каталогов в соответствии с исходными файлами ? Неужели создатели Qt не видят, что это важная функция?
И еще одна вещь - вы могли бы порекомендовать мне использовать инструмент cmake вместо qmake , но я вижу использование cmake намного сложнее , чем qmake, и qmake пока отлично справляется со своей работой для меня - за исключением размещения объектных файлов.