我正在使用PRE_TARGETDEPS
生成源文件,我正在将生成的源文件添加到SOURCES
进行编译。
在qmake运行时,我的生成器的输出显然不存在,因此qmake为每个要创建的源文件输出WARNING: Failure to find:
。
我怎么能平息这个警告,因为我知道我的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
将其放在空文件夹中,并创建一个空的test.cc.in
文件。运行qmake
,您会看到以下警告:
WARNING: Failure to find: test.0.cc
WARNING: Failure to find: test.1.cc
答案 0 :(得分:4)
如何平息此警告
从我对qmake代码的阅读中,看起来你可以:
我认为这些都不会令你满意。
这是我的推理......我在Qt发行版中寻找文本Failure to find
:qt4.8.1。
在qmake/generators/makefile.cpp
中出现了3次。这两段代码如下所示:
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());
用以下方法调用:
l = findFilesInVPATH(l, (comp.flags & Compiler::CompilerRemoveNoExist) ?
VPATH_RemoveMissingFiles : VPATH_WarnMissingFiles, "VPATH_" + comp.variable_in);
因此传入第一个块的flags参数将是RemoveMissingFiles
或WarnMissingFiles
,具体取决于comp.flags & Compiler::CompilerRemoveNoExist
。
或者,有没有更好的方法来使用qmake生成中间文件?
我不确定它是否更好 - 即它确实很复杂 - 但这就是我工作的地方......
在.pro文件中,系统调用完成:
以下是.pro中的一个示例,用于说明如何调用它:
SOURCES += $$system( python my_script_name.py )
如果你愿意,你可以将参数传递给python脚本
注意事项/限制:
qmake
,python脚本就会运行,但在单个make
调用期间不会运行这可以解决您的问题,因为在qmake处理SOURCES
值时,文件已由脚本创建。