我正在使用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)
我怎样才能消除这个警告
从我对 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 参数将是 或RemoveMissingFiles ,WarnMissingFiles具体取决于comp.flags & Compiler::CompilerRemoveNoExist。
或者,有没有更好的方法使用 qmake 生成中间文件?
我不确定它更好 - 即它肯定很复杂 - 但这就是我工作的地方所做的......
在 .pro 文件中,完成了系统调用,即:
以下是 .pro 中的示例,展示了如何调用它:
SOURCES += $$system( python my_script_name.py )
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您当然可以将参数传递给 python 脚本
注意事项/限制:
qmake,但不会在单独运行时运行。make调用期间运行这将解决您的问题,因为当 qmake 处理该SOURCES值时,文件已由脚本创建。