如何平息qmake的"警告:未能找到:"?

smo*_*ris 6 qmake

我正在使用PRE_TARGETDEPS生成源文件,我正在添加生成的源文件以SOURCES进行编译.

在qmake运行时,我的生成器的输出显然不存在,因此WARNING: Failure to find:每个要创建的源文件的qmake输出.

我怎么能平息这个警告,因为我知道我PRE_TARGETDEPS要生产这些文件?

或者,有没有更好的方法来使用qmake生成中间文件?

这是一个test.pro展示问题的完整文件:

TEMPLATE = lib

preprocess.commands += cat test.cc.in | sed 's/a/0/g' > test.0.cc ;
preprocess.commands += cat test.cc.in | sed 's/a/1/g' > test.1.cc ;
preprocess.depends = test.cc.in
QMAKE_EXTRA_TARGETS += preprocess
PRE_TARGETDEPS += preprocess

SOURCES = test.0.cc test.1.cc
Run Code Online (Sandbox Code Playgroud)

将其放在一个空文件夹中,并创建一个空test.cc.in文件.运行qmake,你会看到这些警告:

WARNING: Failure to find: test.0.cc
WARNING: Failure to find: test.1.cc
Run Code Online (Sandbox Code Playgroud)

Cla*_*rae 4

我怎样才能消除这个警告

从我对 qmake 代码的阅读来看,您似乎可以:

  • 任何一个让 qmake 忽略任何不存在的文件名 - 在这种情况下,您的后续步骤将不会构建它们
  • 或者让它写下这些警告

我认为这两者都不能让你满意。


这是我的推理......我正在寻找文字Failure to find这是我的推理......我在我必须交出的 Qt 发行版中

它在 中出现了 3 次qmake/generators/makefile.cpp。两个代码块如下所示:

QStringList
MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &vpath_var)
{
....
                    debug_msg(1, "%s:%d Failure to find %s in vpath (%s)",
                              __FILE__, __LINE__,
                              val.toLatin1().constData(), vpath.join("::").toLatin1().constData());
                    if(flags & VPATH_RemoveMissingFiles)
                        remove_file = true;
                    else if(flags & VPATH_WarnMissingFiles)
                        warn_msg(WarnLogic, "Failure to find: %s", val.toLatin1().constData());
....
                else if(flags & VPATH_WarnMissingFiles)
                    warn_msg(WarnLogic, "Failure to find: %s", val.toLatin1().constData());
Run Code Online (Sandbox Code Playgroud)

这是通过以下方式调用的:

        l = findFilesInVPATH(l, (comp.flags & Compiler::CompilerRemoveNoExist) ?
                             VPATH_RemoveMissingFiles : VPATH_WarnMissingFiles, "VPATH_" + comp.variable_in);
Run Code Online (Sandbox Code Playgroud)

因此,传入第一个块的 flags 参数将是 或RemoveMissingFilesWarnMissingFiles具体取决于comp.flags & Compiler::CompilerRemoveNoExist


或者,有没有更好的方法使用 qmake 生成中间文件?

我不确定它更好 - 即它肯定很复杂 - 但这就是我工作的地方所做的......

在 .pro 文件中,完成了系统调用,即:

  1. 生成所需的文件,
  2. 然后将他们的名字写到标准输出。

以下是 .pro 中的示例,展示了如何调用它:

SOURCES    += $$system( python my_script_name.py )
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您当然可以将参数传递给 python 脚本

注意事项/限制:

  • 这意味着 python 脚本会在您运行时运行qmake,但不会在单独运行时运行。make调用期间运行
  • 每次调用 python 确实会减慢我们的 qmake 步骤 - 花费的时间大约是在不启动 python 的情况下运行 qmake 的两倍 - 但您始终可以使用不同的脚本语言

这将解决您的问题,因为当 qmake 处理该SOURCES值时,文件已由脚本创建。