我意识到我先前的问题是有点困惑关于规则和依赖关系。以下。亲文件中产生一个生成文件,其正常工作如果来源目录中的文件'所产生的存在时间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。

说我们已经得到了所有额外 SOURCESHEADERS 分配一个文件命名为 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

这种方式:

  1. 如果没有 Makefile.pri, 然后它得到创建;
  2. 如果 Makefile.pri 获得创建或更新的,然后 qmake 再次运行,并考虑到其内容,再生 Makefile

正如所述,这个 取决于 qmake 一个产生GNU生成文件,但同样的方法,我认为可能适合于工作,还与其他目标建立系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top