Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Дублирование имен файлов в проектах С++

#cpp #qtcreator #gdb


Имею проект C++ под qmake с иерархической структурой TEMPLATE=SUBDIRS

Module1
   ModuleStaticLib1
   UnutTest1
Module2
   ModuleStaticLib2
   UnutTest2
Module3
   Приложение


В каждом подпроекте могут быть *.cpp файлы с одинаковыми именами


Module1/ModuleStaticLib1/Controller.cpp - реализация класса namespace Module1::Controller    
UnitTest1/Controller.cpp - юнит тест класса Module1::Controller   
Module2/ModuleStaticLib2/Controller.cpp - реализация Module2::Controller    
UnitTest2/Controller.cpp - юнит тест класса Module2::Controller


Работаю в qtcreator. Обратил внимание на странный баг при отладке, если установить
точку останова в  UnitTest1/Controller.cpp, она ставится также и в Module1/ModuleStaticLib1/Controller.cpp
(может и в другие одноименные файлы, но я гоняю один тест). В рамках одного модуля
имена файлов не повторяются.

Кроме того мой коллега, выразил сомнение в таком подходе, могут быть  проблемы со
сборкой(я не замечал). На сколько корректно использование одинаковых имен в разных
модулях, и чем может быть баг с точками оcтанова qtcreator или GDB?


QtCreator 3.5.81 
gcc version 4.8.4
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Linux Mint17


PS Демонстрация структуры "Глюкодрома" =)

    


Ответы

Ответ 1



По-моему, опция "Set breakpoints using a full absolute path" решает проблему с дублированием точек останова.

Ответ 2



Будет жуткий глюкодром - среда объединяет файлы с равными именами. Но гораздо хуже будет глюкодром в сознании человека, которому вы этой лазанье придется разбираться. Хотя бы из-за этого стоит уйти от такой структуры. UPD от 9 октября 2016. Qt creator в связке с MSVC2012 работает как попало, если в проекте есть одинаковые по именам файлы, он затирает одни объектники (*.obj) другими, более поздними, так как сваливает все в один каталог. В итоге - тонны ошибок при линковке.

Комментариев нет:

Отправить комментарий