Qt4 в Visual Studio 2008 – файлы moc-ed исключаются из сборки?

StackOverflow https://stackoverflow.com/questions/1200268

  •  05-07-2019
  •  | 
  •  

Вопрос

Недавно я установил VS Addin из Qt Software и импортировал свой проект .pro в VS2008.В целом все работает нормально, за одним небольшим, но досадным исключением.

Предположим, у меня есть файл file.cpp с классом, который объявляет, что это Q_OBJECT.Таким образом, файл создан в формате MOC, и создается moc_file.cpp, который доступен в решении в разделе «Сгенерированные файлы».Все идет нормально.

Самое смешное, что когда я что-то меняю в file.cpp (например, добавляю строку) и сохраняю файл с помощью Ctrl+S, moc_file.cpp исключается из сборки (на значке можно увидеть знак отсутствия записи). ).И я сталкиваюсь со множеством типичных ошибок компоновщика, когда нажимаю F7 для создания решения.Чтобы исправить ситуацию, мне нужно зайти в свойства moc_file.cpp и изменить «Исключить из сборки» с «Да» на «Нет».Тогда все работает нормально.

Кто-то еще испытывает то же самое?Я делаю что-то неправильно?

Это было полезно?

Решение

Проблема решена. Я обнаружил, что в моем собственном .pro-файле, описывающем мой проект, я указал MOC_DIR как:

  

MOC_DIR = .moc

После импорта в каталог Visual Studio для " Сгенерированных файлов " был одинаковым как для Release, так и для Debug. Итак, когда моей активной конфигурацией была, например, Debug, когда я сохранил файл, он был исключен из сборки, потому что это было целесообразно для файла, связанного с релизом, - как предложили rpg и Andrew. После изменения каталога на .moc \ $ (ConfigurationName) проблема больше не видна (и я вижу 2 версии каждого сгенерированного файла в моем решении - по одной для каждой конфигурации).

Спасибо всем за помощь!

Другие советы

На самом деле, я нашел решение для этой "функции". Вы должны добавить ОБА файлы из GeneratedFiles \ Debug и GeneratedFiles \ Debug (или из других каталогов конфигураций). Qt исключит из сборки все, что не относится к выбранному типу сборки.

Да, я использую последний VS Addin, и мой проект правильно рассматривается как Qt Project.

вы правильно установили конфигурацию?

Откройте окно «Настройки конфигурации отладки». Установите следующие элементы, как указано ниже:

  • «Командная строка сборки» qmake -project & qmake & nmake debug
  • «Чистые команды» nmake debug-clean
  • «Перестроить командную строку» qmake и отладка nmake

Повторите то же самое с конфигурацией выпуска.

Я видел поведение исключения из сборки в VS2008 (также и в VS 2003), но проект собирается правильно.Когда вы меняете moc-файл, Qt придется воссоздать moc-файл, поскольку он устарел.

Я подозреваю, что алгоритм Qt выглядит примерно так:

  • обнаружить, что файл был изменен
  • установить старый файл moc как исключенный из сборки
  • добавить в проект новый файл с тем же именем и включить его в сборку

Глядя на мой проект VS 2003, я вижу, что некоторые файлы moc_* включены в проект дважды: одна версия помечена как исключенная из сборки, а другая — нет.

Повторное создание файла .vsproj с помощью qmake может решить проблему.

Для каждого имеющегося у вас файла QObject плагин QT создает файл moc_ для каждой конфигурации сборки (обычно это только Debug и Release). Когда вы меняете текущую конфигурацию, вы можете видеть, как знаки «Нет записи» переходят из одного файла в другой.
Файлы moc_ не должны изменяться при изменении файла .cpp. только когда вы меняете файлы .h. Все это приводит меня к мысли, что с вашей конфигурацией произошло что-то не так, и действительно лучший способ исправить это - воссоздать ее с помощью qmake, используя что-то вроде этого:

qmake -spec win32-msvc2008
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top