我想使用我的一个源文件中定义的预处理器宏作为我的Makefile中的变量。最简单的方法是使用类似程序的sed
来查找宏。但是,宏是基于条件(其他宏)定义的,因此对该宏的简单搜索可以产生多个结果。这段代码可以说明一下:
#ifdef FOO
#define BAR 10
#else
#ifdef BAZ
#define BAR 50
#else
#define BAR 100
#endif
#endif
Makefile如何知道源文件中是否定义了FOO
或BAZ
,以便在编译期间最终获得正确的BAR
值?
答案 0 :(得分:2)
对该问题的另一种看法是质疑自己为什么 C常量必须在编译过程之外发挥作用。然后经常会发现这个常量(以及许多其他常量)确实不是C程序的常量部分,而是配置项。因此,值得考虑的是,这些配置项是否应该真正隐藏在C源文件中,或者是否更清晰,以便从更合适的配置格式生成C源。根据我的经验,每一个比 HelloWorld 大得多的项目很快就会从干净和受控的关注点分离中获益(源编辑与配置编辑)。
答案 1 :(得分:1)
您可以使用`Computer Organization Computer Architecture
--> often called micro architecture. --> It is a bit high level.
-->Transparent from the coder point --> To the coder point of view.
of view. [Ex. coder is aware of which
instruction has been used.]
-->Corresponding to the circuit Diagram. --> Corresponding to set of
instructions.
-->It shows how the System works. --> Describes what the System does.
`
(或cpp
)。最简单的方法是将所有宏定义放入头文件中,比如cc -E
。您还需要一个特殊的C文件(例如macros.h
),您只需使用您的宏。选择一个易于过滤的前缀,例如:
macros.c
现在,您可以使用
提取宏值#include "macros.h"
valueOf_FOO = FOO
valueOf_BAR = BAR
这将打印
$(CC) -E $(CFLAGS) $(OTHER_CFLAGS) macros.c | grep '^valueOf_' | sed 's/valueOf_//'
到终端。