Russian Qt Forum
Ноябрь 24, 2024, 04:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMAKE_EXTRA_COMPILERS помогите разобраться  (Прочитано 4460 раз)
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« : Февраль 21, 2014, 18:56 »

Обращаюсь к знатокам.
фрагмент из pro файла

Код:
QLALRSOURCES = $$PWD/engine/t.g
QLALRCPPGEN  = $$PWD/engine/QLalrOracleParser.cpp \
               $$PWD/engine/qlalroracleparsertable.cpp

OTHER_FILES += $$QLALRSOURCES

qlalrsource.input = QLALRSOURCES
qlalrsource.output = $$QLALRCPPGEN
qlalrsource.commands =  @echo "============== qlalr started ================" && cd $$PWD/engine && qlalr.exe --qt --no-debug --no-lines $$PWD/engine/t.g
qlalrsource.variable_out = SOURCES
qlalrsource.name = QLALR Parser Generation
qlalrsource.CONFIG += combined
#qlalrsource.depends = $$QLALRCPPGEN $$QLALRSOURCES
QMAKE_EXTRA_COMPILERS += qlalrsource
...
SOURCES += $$QLALRCPPGEN

Все, в общем-то, хорошо работает, но есть два раздражающих момента:
1. Выдается предупреждение при линковке: LNK4042: object specified more than once; extras ignored
2. При изменении исходного файла t.g перекомпилируется только один файл QLalrOracleParser.cpp.
  А что еще интересней - при повторной компиляции (исходные тексты не меняются) происходит перекомпиляция всего остального.
  То есть при изменении t.g приходится выполнять построение два раза.

Что я делаю не как. Вразумите, плз...
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #1 : Февраль 21, 2014, 19:31 »

Может здесь найдется ответ.  (см. п.17)
« Последнее редактирование: Февраль 21, 2014, 19:34 от lesav » Записан

kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #2 : Февраль 21, 2014, 21:09 »

Может здесь найдется ответ.  (см. п.17)
Искал, не нашел Плачущий
Собственно, именно эта статья и сподвигла на автоматизацию использования qlalr... Но что-то не выходит.
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #3 : Февраль 22, 2014, 15:13 »

2. При изменении исходного файла t.g перекомпилируется только один файл QLalrOracleParser.cpp.
  А что еще интересней - при повторной компиляции (исходные тексты не меняются) происходит перекомпиляция всего остального.
  То есть при изменении t.g приходится выполнять построение два раза.
Код:
#qlalrsource.depends = $$QLALRCPPGEN $$QLALRSOURCES

Тоесть нужно указать зависимость компиляции объектных файлов от qlalrsource.  Вот только как все это записать в .pro !?!
В блоге есть статья 14 qmake: добавление своих команд в Makefile, в ней разъясняется как оперировать зависимостями
Записан

kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #4 : Февраль 23, 2014, 18:52 »

К сожалению, эктра-таржетс в данном случае не помогут. По крайней мере, у меня при их использовании сначала перекомпилировались зависимые исходники, а только потом выполнилась перегенерация исходников... что логично.

Пока лучшее чего мне удалось добиться это
Код:
QLALRSOURCES = $$PWD/engine/t.g
QLALRCPPGEN  = $$PWD/engine/QLalrOracleParser.cpp \
               $$PWD/engine/qlalroracleparsertable.cpp
QLALRHGEN    = $$PWD/engine/qlalroracleparsertable_p.h \
               $$PWD/engine/QLalrOracleParser.h
QLALRALLGEN  = $$QLALRCPPGEN $$QLALRHGEN

for ( genFile, QLALRALLGEN ) {
  !exists($$system_path($$genFile)) {
    system(@echo /*! STUB !*/ > $$system_path($$genFile))
  }
}

OTHER_FILES += $$QLALRSOURCES

qlalrsource.input = QLALRSOURCES
qlalrsource.output = $$PWD/HER_TO_DEL.h
qlalrsource.commands =  @echo "============== qlalr started ================" && cd $$PWD/engine && qlalr.exe --qt --no-debug --no-lines $$PWD/engine/t.g
qlalrsource.variable_out = HEADERS
qlalrsource.name = QLALR Parser Generation
qlalrsource.CONFIG = target_predeps no_link
QMAKE_EXTRA_COMPILERS += qlalrsource
Но к сожалению, этот вариант не прокатывает при использования jom-а, хотя вполне себе работоспособен для nmake (gcc-й make и mingw32-make не проверял).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.208 секунд. Запросов: 23.