Я портирую некоторые из своих проектов Qt на CMake
, чтобы сделать их более гибкими в разных IDE.
Единственная печальная часть с CMake
, когда я генерирую VS solution
, она не будет работать удивительнокак это работает с расширением Qt VS.
Например, если я изменяю файл .ui
, мне нужно пересобрать проект, чтобы увидеть изменения в графическом интерфейсе по сравнению с тем, когда я использую сгенерированное расширение VSProject, он будет автоматически идентифицировать изменения и повторно перемещать класс, которому принадлежит файл .ui
, без необходимости повторной сборки всего проекта.
Если я посмотрю на конфигурацию проекта, VS Extension генерирует в файле .vcxproj, он добавил бы ItemDefinitionGroup
некоторые элементы следующим образом:
И каждый класс / файл, включенный в проект, будет помечен в соответствии с типом класса (QtMoc
, QtUic
, QtRcc
):
Вероятно, это то, что дает Расширение Qt VS, чтобы идентифицировать, как обрабатывать каждый файл, поэтому, если оно QtUic
то он проверил быизменения в файлах .ui
присутствуют, и, если есть новые изменения, он перекомпилирует файл пользовательского интерфейса, затем moc класс, который принадлежит файлу .ui
, и только затем повторно компилирует фактический класс, которому принадлежит.ui
file.
Итак, есть ли какой-нибудь возможный способ заставить CMake сгенерировать проект, похожий на одно расширение Qt VS, сгенерированное, когда я выберу в CMake генератор VS?Я предполагаю, что CMake не поддерживает это внутренне, поскольку они стремятся абстрагировать все это поведение, чтобы сделать все проекты VS как можно более общими, независимо от того, какая среда используется, но у CMake есть флаги для поддержки Qt, например:
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
Так что я предполагаю, что это не будет большой работой для реализации.
Возможно, мой лучший выбор - раскошелиться на CMake и самому повторно реализовать это поведение?Пример psuedo:
if CMAKE_AUTOMOC == ON & CMAKE_VS_EXT == ON
Do some custom changes to the .vcxproj file
endif
Извините за длинный пост, но любые идеи и помощь будут с благодарностью.Спасибо!