2016-10-31 36 views
0

我有一个#define ONB在一个c文件(与几个#ifndef...#endif s)改变了许多方面的程序行为。现在我想更改项目makefile(或者更好的Makefile.am),这样如果ONB被定义并且相应地设置了一些其他选项,它将运行一些特殊的命令。
如何检查Makefile中c文件中定义的宏?

我搜索了网页,但是我发现的所有内容都是检查环境变量......那么有没有办法做到这一点?或者我必须改变的C代码中的环境变量,以检查(我不想改变代码,因为它是一个非常大的项目,我不知道它的一切)

回答

0

问题:我的水平是不够的要问的意见,所以我不得不在这里问:

  • 如何以及何时被定义添加到目标摆在首位?
  • 你基本上想要一种方式能够发布编译查询二进制文件来确定是否使用了特定的定义?
  • 如果你可以举一个具体的例子,比如你想运行什么特殊命令,以及涉及的.c.h文件是什么,这将会很有帮助。

可能的解决办法:取决于你需要什么,你可以使用LLVM工具也许生成并检查你的代码的AST,看是否有使用界定的。但是这似乎有点像过度工程。

可能的解决方法:你也可以使用#includes以.c或头文件和有条件的错误拉来生成,或编译(到的.o),那么如果编译失败,你知道它被定义或不。但是这有它自己的问题,取决于你的make文件中的东西是如何设置的。

+0

我不想查询二进制文件......如果可能,我想根据abc.h文件中的定义更改makefile。根据你的独立性,我可以在Makefile中包含一个'.h'文件,并在我定义的内容上使用#ifeq? – mhk

+0

假设您有文件要检查是否有定义,例如main.cpp – Voltaire

+0

这是正确的...... – mhk