Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xintrea от Июнь 20, 2015, 13:51



Название: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: xintrea от Июнь 20, 2015, 13:51
Вот есть у меня в проекте файлы main.cpp и main.h. В main.cpp прописан инклюд файла main.h.

В файле main.h есть определение:

#define RELEASE_VERSION   72

Я меняю значение этого определения на 73, и запускаю сборку. В результате генерируется бинарник, в котором в разделе "Версия программы" видна версия 72 а не 73. А чтобы версия в бинарнике поменялась, надо запустить полную пересборку проекта!

Я залез в Makefile, который генерирует qmake. Там для цели main.o есть зависимость src/main.h:

Код:
build/main.o: src/main.cpp src/main.h \
src/views/mainWindow/MainWindow.h \
src/models/appConfig/AppConfig.h

И при сборке видно, что цель main.o компилится:

Код:
14:31:59: Starting: "/usr/bin/make" 
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DANY_OS=1 -DMEEGO_OS=2 -DANDROID_OS=3 -DTARGET_OS=ANY_OS -DQT_SVG_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtSvg -I/usr/include/qt4 -Isrc -Ibuild -o build/main.o src/main.cpp

Но почему тогда конечный бинарник не содержит измененного номера версии?


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: Akon от Июнь 20, 2015, 14:29
Потому что main.h не присутствует в HEADERS.


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: xintrea от Июнь 20, 2015, 14:43
Потому что main.h не присутствует в HEADERS.

В *.pro файле присутсвует:

Код:
HEADERS = src/main.h \
    src/views/recordTable/RecordTableScreen.h \
    src/views/recordTable/RecordTableView.h \


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: Igors от Июнь 20, 2015, 14:51
В файле main.h есть определение:

#define RELEASE_VERSION   72

Я меняю значение этого определения на 73, и запускаю сборку. В результате генерируется бинарник, в котором в разделе "Версия программы" видна версия 72 а не 73. А чтобы версия в бинарнике поменялась, надо запустить полную пересборку проекта!
Для начала после этого дефайна поставить строку типа
Код
C++ (Qt)
#error 123
И посмотреть какие исходники ее схватили


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: Alex Custov от Июнь 20, 2015, 16:11
В результате генерируется бинарник, в котором в разделе "Версия программы" видна версия 72 а не 73. А чтобы версия в бинарнике поменялась, надо запустить полную пересборку проекта!

Версия имеется ввиду в win32 ресурсах? А как генерируется ресурсный файл (rc) с версией?


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: xintrea от Июнь 20, 2015, 17:35
В результате генерируется бинарник, в котором в разделе "Версия программы" видна версия 72 а не 73. А чтобы версия в бинарнике поменялась, надо запустить полную пересборку проекта!

Версия имеется ввиду в win32 ресурсах? А как генерируется ресурсный файл (rc) с версией?

Да нет, просто при выводе на экран берется из дефайна.


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: Akon от Июнь 20, 2015, 18:03
У вас просто одно приложение или библиотека (где дефайн) и приложение, где выводится версия?


Название: Re: Почему не перекомпилируются изменения, внесенные в *.h - файл?
Отправлено: Alex Custov от Июнь 20, 2015, 18:17
вангую что DEPENDPATH не прописан