waf : 将编译器标志传递给 qt 的 moc

Posted

技术标签:

【中文标题】waf : 将编译器标志传递给 qt 的 moc【英文标题】:waf : passing compiler flags to qt's moc 【发布时间】:2012-07-06 10:42:37 【问题描述】:

我尝试使用 waf 运行一个项目,该项目使用 boost library 。为了克服problem,我需要将-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED 参数传递给MOC。我尝试在wscript 中这样做

   bld(features ='cxx',
       source   ='GSTEngine.cpp',
       target   = 'GSTEngine.o',
       includes = qtinc+gstinc+taginc,use=['BOOST'],
       uselib   = qtlibs,
       cxxflags = ['-DQT_NO_KEYWORDS','-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED'])

但它失败了。如何使用waf 将参数传递给MOC

【问题讨论】:

您确定这些需要传递给 moc 吗?它们看起来像通用定义,应该通过 "bld(..., defined=['QT_NO_KEYWORDS', 'BOOST_TT_HAS_OPERATOR_HPP_INCLUDED'], ...)" 定义,如 docs.waf.googlecode.com/git/book_16/single.html 第 9.1.2 节 【参考方案1】:

这里可能的问题是waf 调用的new task for moc 可能与您在上面定义的任务生成器携带的cxxflags 不同。

一种可能的解决方法是将定义添加到waf 环境中,如下所示:

conf.env.append_unique('DEFINES',
    ['QT_NO_KEYWORDS','BOOST_TT_HAS_OPERATOR_HPP_INCLUDED'])

如果您只想将定义添加到moc 任务,您可以实现一个自定义功能并将其添加到您的任务生成器中,该生成器挖掘出moc 任务并添加定义。

【讨论】:

以上是关于waf : 将编译器标志传递给 qt 的 moc的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止CMake将特定于平台的标志传递给编译器?

如何使用 QT 和 C++ 将字符串参数传递给函数

将主要参数传递给 gui 库的 init 函数

如何在 qmake 项目中向 moc 添加特定标志?

qt中moc的作用

Qt核心剖析: moc