Название: Два файла .cpp с одним именем в разных папках Отправлено: juvf от Январь 14, 2009, 11:33 Здравствуйте!
Имеется проект с использованием Qt(qmake), в котором появились в разных папках два файла с одинаковыми именами (папка1/xxx.cpp и папка2/xxx.cpp). В этих файлах реализуются два класса с одинаковыми именами XXX, но в разных пространствах имен. После выполнения qmake создается обычный makefile, в котором Код: XXX.o: папка1/XXX.h т.е. получается, что имя цели одинаковое для разных файлов, а также объектный файл для этих целей создается в одной и той же директории с одинаковым именем При компиляции, сначала появляется варнинг о том, что одно правило связанное с одним из фалов уже было и будет переназначено. В результате имеем ошибку компиляции multiple definition XXX::XXX(). Как научить qmake из Qt создавать корректный makefile в этом случае? Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: Dendy от Январь 14, 2009, 13:17 Поздравляю, вы не первый кто напоролся на эти грабли. Коротко: Just use CMake!
CMake как система сборки для Qt приложений (http://prog.org.ru/wiki/index.php?title=CMake_%D0%BA%D0%B0%D0%BA_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_Qt_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9) Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: juvf от Январь 14, 2009, 13:30 О как!!
Спасибо! Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: break от Январь 16, 2009, 00:54 Имело дело с проектом в котором куча подпроектов внутри кот. по крайней мере файл main.cpp точно повторялся, но видимо это не тот случай?
Какие еще есть доводы в пользу cmake и отказа от qmake? Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: Dendy от Январь 16, 2009, 07:31 Цитировать Имело дело с проектом в котором куча подпроектов внутри кот. по крайней мере файл main.cpp точно повторялся, но видимо это не тот случай? Всё верно, для отдельных подпроектов создаются временные файлы внутри директории этого подпроекта и они не конфликтуют между собой. Автор напоролся на случай, когда в одном проекте: Код: SOURCES += \ То же самое с заголовочниками - QMake валит сгенерированные MOC-файлы из них в одну директорию без учёта пути. Если вы пытаетесь сейчас найти логику, что случай вырожденый и некорректный, то могу вас разочаровать, случай абсолютно нормальный. Просто QMake был написан и существует только для самой Qt, сами разработчики такие конструкции файлов не использовали, поэтому им больше и не нужно было. В общем случае если им нужна какая-то новая фича для себя в системе сборки - они её хардкодят в qmake, гибкости ноль. Цитировать Какие еще есть доводы в пользу cmake и отказа от qmake? Из этой фразы я делаю вывод, что про CMake вы только слышали, иначе такого вопроса бы не возникло. Обязательно напишу статью на Wiki в ближайшее время. Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: lit-uriy от Январь 16, 2009, 08:25 2 Dendy, Очень хотелось бы объективного описания/сравнения с qmake в вики, в разделе Зачем мне может понадобиться использовать CMake?. Т.к. фраза
Цитировать Вы программируете больше чем для одной платформы и хотите сделать ваш проект переносимым. применима и к qmake.Я тоже лишь слышал о CMake и прочитав статью пришел к выводу, что под каждую конкретную библиотеку, нужна какая-то примочка к CMake, типа Выше вызов find_package(Qt4) обьявил набор вспомогательных функций для Qt4. П.С. извиняюсь за оффтоп Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: Steven_Orko от Январь 16, 2009, 12:27 Какие еще есть доводы в пользу cmake и отказа от qmake? Я не нашел для себя долвольно сильных, потому перешел на scons... Название: Re: Два файла .cpp с одним именем в разных папках Отправлено: break от Январь 20, 2009, 03:52 Цитировать SOURCES += \ Wicked/Dialog.cpp \ Resolver/Dialog.cpp \ Hammer/Dialog.cpp Наверное этот пример имеет смысл только при переводе готового проекта на QMAKE - да большое количество таких окошек переименовать будет тяжко, а если программист сам эти окошки постепенно добавляет в программу то ему не оч. страшно называть их WickedDialog.cpp, ResolverDialog.cpp - и т.д. пусть даже оставля в разных папках. Просто насторожило что такая ситуация может заставить переходить на другую систему сборки. Я личного опыта работы с cmake действительно не имел. И из-за такой ситуации просто поправил бы имена. |