5

......它应该做但没有。

这对我来说是 qmake 的主要挫折之一。qbs 是我们 Qt 的未来,但现在我们仍然坚持使用 qmake。那么,可以做些什么呢?

4

1 回答 1

2

我滥用 QMAKE_EXTRA_COMPILERS 来完成这个。我需要使用它,因为在处理完所有功能后我必须获得 DEFINES 值。

# in this function all the work is done
defineReplace(checkDefinesForChanges) {
  old_def = $$cat($$OUT_PWD/defines.txt)
  curr_def = $$DEFINES
  curr_def -= $$old_def
  old_def -= $$DEFINES
  diff = $$old_def $$curr_def
  # delete all files in OUT_PWD if macros were changed
  !isEmpty(diff) {
    A = $$system(del /F /Q /S $$system_path($${OUT_PWD}/*.*))
    message(DEFINES WERE CHANGED)
  }
  write_file($$OUT_PWD/defines.txt, DEFINES);
  return(???)
}

# use QMAKE_EXTRA_COMPILERS to launch function
# checkDefinesForChanges after all features processing
_defines_check_ = ???
defines_check.name = check on defines being changed
defines_check.input = _defines_check_
defines_check.CONFIG += no_link ignore_no_exist
defines_check.depends = ???
defines_check.commands = ???
defines_check.output_function = checkDefinesForChanges
defines_check.clean = 333
QMAKE_EXTRA_COMPILERS += defines_check

# make sure qmake is run if deines.txt is deleted
recompile_on_defines_txt_not_existsing.target = $(MAKEFILE)
recompile_on_defines_txt_not_existsing.depends = $$OUT_PWD/defines.txt
recompile_on_defines_txt_not_existsing2.target = $$OUT_PWD/defines.txt
recompile_on_defines_txt_not_existsing2.depends = qmake
QMAKE_EXTRA_TARGETS += recompile_on_defines_txt_not_existsing recompile_on_defines_txt_not_existsing2    

俄语来源

于 2013-06-07T13:48:53.870 回答