Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: kai666_73 от Февраль 21, 2014, 18:56



Название: QMAKE_EXTRA_COMPILERS помогите разобраться
Отправлено: kai666_73 от Февраль 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 приходится выполнять построение два раза.

Что я делаю не как. Вразумите, плз...


Название: Re: QMAKE_EXTRA_COMPILERS помогите разобраться
Отправлено: lesav от Февраль 21, 2014, 19:31
Может здесь найдется (http://www.prog.org.ru/index.php?topic=26570.msg190825#msg190825) ответ.  (см. п.17)


Название: Re: QMAKE_EXTRA_COMPILERS помогите разобраться
Отправлено: kai666_73 от Февраль 21, 2014, 21:09
Может здесь найдется (http://www.prog.org.ru/index.php?topic=26570.msg190825#msg190825) ответ.  (см. п.17)
Искал, не нашел :'(
Собственно, именно эта статья и сподвигла на автоматизацию использования qlalr... Но что-то не выходит.


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

Тоесть нужно указать зависимость компиляции объектных файлов от qlalrsource.  Вот только как все это записать в .pro !?!
В блоге есть статья 14 qmake: добавление своих команд в Makefile (http://blog.mgsxx.com/?p=2046), в ней разъясняется как оперировать зависимостями


Название: Re: QMAKE_EXTRA_COMPILERS помогите разобраться
Отправлено: kai666_73 от Февраль 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 не проверял).