我意识到我之前的问题对规则和依赖关系有点困惑。下面的.pro文件生成一个makefile,如果在qmake运行时“生成”目录中的源文件存在,该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,它会将generated/的内容添加到源代码中?
发布于 2010-01-07 02:32:49
您可能需要在两个过程中完成此操作。
在qmake文件中,添加以下行:
include( generated/generated.pri )然后,在code_generator脚本的末尾,将源代码添加到generated.pri文件中(本例使用bash,但几乎所有语言的想法都是相同的):
rm generated/generated.pri
for file in $( ls generated/*.cpp ); do
echo "SOURCES += ${file}" >> generated/generated.pri
done第一次运行qmake文件时,generated/generated.pri可能是空的。当您运行make时,它将填充generated.pri文件。第二次,它将重新创建make文件(作为源.pri文件更改),然后再次编译。您也许能够摆弄其他命令,这些命令将为您完成第二阶段。
发布于 2017-02-11 00:45:21
我已经提出了一个解决方案,我相信它是健壮和通用的,它依赖于qmake生成一个GNU Makefile。
假设我们在一个名为Makefile.pri的文件中获得了所有额外的SOURCES和HEADERS赋值,该文件通过执行脚本generate_Makefile.pri.sh生成,该脚本还生成Makefile.pri中提到的源和/或头文件。
我们希望该文件由构建系统本身自动且可靠地生成,以便包含在.pro文件中,以便qmake可以考虑其内容并生成具有适当依赖项的Makefile。
这就是我们必须放入.pro文件中的内容。
Makefile_pri.target = Makefile.pri
Makefile_pri.commands = generate_Makefile.pri.sh
Makefile_pri.depends = FORCE
Makefile.target = $$MAKEFILE
Makefile.depends = Makefile_pri
include($$Makefile_pri.target)
QMAKE_EXTRA_TARGETS = Makefile Makefile_pri这样:
Makefile.pri,则会创建它;Makefile.pri,则qmake会再次运行并考虑其内容,从而重新生成qmake如上所述,这个确实依赖于qmake生成GNU Makefile,但我相信同样的方法也可以适用于其他目标构建系统。
https://stackoverflow.com/questions/2006747
复制相似问题