Скажем, у меня есть приложение 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 делает свою работу превосходной для меня до сих пор - кроме размещения объектных файлов.