找出哪些文件定义了宏

Find out which files define a macro

我有一个 Android AOSP 源代码树,我正试图将其移植到 UbuntuTouch。原始树构建了一个工作的 AOSP rom,但是当我尝试在其上构建 Ubuntu 时,我的构建在许多文件上不断失败,并出现不同的错误,我认为我已经能够调试以找出所有这些错误考虑 Make 将初始化的名为 "Y" 的变量,但它似乎与已经具有相同名称的宏混淆,从而导致不可预测的错误。事实上,我已经能够解决以前的问题,在函数失败到 .c 源文件之前取消定义宏 Y。这不是一个好的解决方法,我知道,现在另一个(我认为它是相关的)弹出,我厌倦了一个一个地修补所有这些文件:

system/core/include/utils/StrongPointer.h:101:23: error: expected nested-name-specifier before numeric constant
system/core/include/utils/StrongPointer.h:101:23: error: expected '>' before numeric constant

这是错误的线路:

100 private:    
101     template<typename Y> friend class sp;
102     template<typename Y> friend class wp;
103     void set_pointer(T* ptr);
104     T* m_ptr;

是否和我怀疑的一样? 我怎么能找到整个树中的哪个文件全局定义了那个宏?

对我的 shell 使用 -x 标志,我能够看到在编译器调用命令行上传递了一个“-DY”,显然定义了一个名为 "Y" 的宏并将其初始化为 1 . 经过一些调查,我发现从 ProjectConfig.mk 变量中获取的一些值在被大写后作为宏传递给预处理器。我错误地将这些值之一设置为 "y",导致构建系统将其作为宏 "Y" 传递给工具链,并导致所有这些混乱。

非常感谢 irc.freenode.org/#gcc 的工作人员。