如果更改DEFINES,如何使qmake执行干净重建

时间:2013-06-07 13:48:54

标签: qmake

......它应该做但不做。

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

1 个答案:

答案 0 :(得分: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    

Source in Russian