我意识到我先前的问题对规则和依赖项有些困惑。如果qmake运行时目录“generated”中的源文件存在,则以下.pro文件生成一个makefile,该文件可以正常工作。
idl.target = generated/qmtest.h
idl.commands = code_generator
idl.config = no_link
idl.depends = $$SOURCES $$HEADERS $$FORMS
TEMPLATE = app
INCLUDEPATH += generated
SOURCES += generated/*.cpp
PRE_TARGETDEPS += generated/qmtest.h
QMAKE_EXTRA_UNIX_TARGETS += idl
但是当qmake运行时,它仅生成一个makefile,而PRE_TARGETDEPS和QMAKE_EXTRA_UNIX_TARGETS并没有帮助我。我怎样才能让qmake生成一个makefile文件,该文件将把generate/的内容添加到SOURCES?
最佳答案
您可能需要分两次通过。
在您的qmake文件中,添加以下行:
include( generated/generated.pri )
然后,在code_generator脚本的末尾,将源添加到generate.pri文件中(以bash为例,但是对于几乎所有语言而言,想法都是相同的):
rm generated/generated.pri
for file in $( ls generated/*.cpp ); do
echo "SOURCES += ${file}" >> generated/generated.pri
done
第一次运行qmake文件时,generate/generated.pri可能为空。运行make时,它将填充generate.pri文件。第二次,它将重新创建make文件(作为源.pri文件的更改),然后再次编译。您也许可以弄乱其他可以为您完成第二阶段操作的命令。
关于qt - 生成代码的qmake规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2006747/