Зависимости заголовков в qmake с использованием MSVC Express

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Я использую QtCreator в Windows, используя компилятор MSVC (компилятор из экспресс-версии Visual C++) и qt 4.5.2 с открытым исходным кодом.

Когда я изменяю заголовок проекта и нажимаю «Создать все», на самом деле ничего не создается, только если я изменяю файл .cpp, измененный cpp компилируется.

Это приводит к тому, что каждый раз, когда мне приходится изменить какой-либо заголовочный файл, используемый несколькими файлами .cpp, мне приходится перестраивать весь проект.Есть ли способ избежать такого поведения?

заранее спасибо

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

Решение

Перечислены ли файлы заголовков в переменной HEADERS вашего файла .pro?Я думаю, что перечисление заголовочных файлов в HEADERS также необходимо для того, чтобы классы внутри них были MOC.

**[edit]**Неважно, я тестировал это с помощью Qt Creator 1.2.1 из Qt 4.5.2 SDK в Linux, и когда я «касаюсь» заголовочного файла, cpps, от которого он зависит, перекомпилируются, независимо от того, есть ли это заголовок указан в списке HEADER.

В Makefile, создаваемом qmake, мои файлы cpp, включающие рассматриваемый файл h, имеют правило, которое явно указывает файл h как зависимость.Не знаю, как qmake это делает.Я бы посоветовал просмотреть созданный для вас make-файл qmake и посмотреть, как выглядит правило для одного из ваших файлов cpp.[/редактировать]

[отредактируйте еще раз, уйдя от темы] ** Обычно в системе сборки на основе make, которая вызывает gcc, вы генерируете информацию о зависимостях для файлов заголовков, включенных в cpps, прося gcc сделать это за вас с флагом -M.cl.exe (компилятор Microsoft C++) не создаст файл .d, как бы тщательно вы его ни просили, поэтому довольно часто используется параметр /showincludes, а затем анализируется вывод с помощью сценария, чтобы преобразовать его в файл . d, поэтому make может включить его (многие люди пропускают этот шаг и просто не имеют надлежащей проверки зависимостей в сборках на основе make, использующих cl.exe, потому что это своего рода PITA). Однако, я не думаю, что qmake делает что-то подобное, чтобы получить информацию о зависимостях, потому что qmake генерирует make-файл, который, в свою очередь, вызывает компилятор, и в этот момент информация о зависимостях (по крайней мере, в make-файле, который я просматривал) труднодоступна. закодированный.[/редактировать]**

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