题
我意识到我先前的问题是有点困惑关于规则和依赖关系。以下。亲文件中产生一个生成文件,其正常工作如果来源目录中的文件'所产生的存在时间qmake运行。
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运行,它只产生一个生成文件,并PRE_TARGETDEPS&QMAKE_EXTRA_UNIX_TARGETS不帮助我。我怎么能得到qmake产生一个生成文件,这将增加内容的产生来源?
解决方案
您可能需要做此两遍。
在您的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.pri大概会是空的。当你运行make时,将填充generated.pri文件。第二次,它会重新生成文件(作为源文件.pri改变),然后重新编译。您也许能摆弄它会做第二阶段为你其他的命令。
其他提示
我刚才有同样的问题,但只是一个单一的文件生成一个简单的用例。为此,我发现了一个更简单的方法,通过使用代替SOURCES GENERATED_SOURCES实现这一点:
dummyfile.target = dummy.cpp dummyfile.commands = touch $$dummyfile.target QMAKE_EXTRA_TARGETS += dummyfile GENERATED_SOURCES += $$dummyfile.target
大概一个可以推动该成的qmake环并生成用于多个文件的正确目标,以及
我已经想出了一个解决方案,我认为是强大和一般情况下,依靠 qmake
一个产生GNU Makefile。
说我们已经得到了所有额外 SOURCES
和 HEADERS
分配一个文件命名为 Makefile.pri
, ,其产生时执行的脚本 generate_Makefile.pri.sh
这也产生的来源和/或标题中提到的 Makefile.pri
.
我们希望该文件会自动、可靠地产生的建立系统本身,所以应包括在的 .pro
文件,以使 qmake
可以考虑到它的内容和产生的生成文件与适当的依赖关系。
这是什么然后我们必须把我们的 .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
再次运行,并考虑到其内容,再生Makefile
正如所述,这个 做 取决于 qmake
一个产生GNU生成文件,但同样的方法,我认为可能适合于工作,还与其他目标建立系统。