在Makefile中使用源文件中的define宏

时间:2018-03-23 04:36:31

标签: bash makefile gnu-make

我想使用我的一个源文件中定义的预处理器宏作为我的Makefile中的变量。最简单的方法是使用类似程序的sed来查找宏。但是,宏是基于条件(其他宏)定义的,因此对该宏的简单搜索可以产生多个结果。这段代码可以说明一下:

#ifdef FOO
#define BAR 10
#else
#ifdef BAZ
#define BAR 50
#else
#define BAR 100
#endif
#endif

Makefile如何知道源文件中是否定义了FOOBAZ,以便在编译期间最终获得正确的BAR值?

2 个答案:

答案 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_//'

到终端。