如何在包含预处理程序指令

时间:2019-10-23 07:36:52

标签: c makefile c-preprocessor

我想包含基于makefile变量的头文件。

MakeFile

DISC     := left

将此变量传递给C程序,如下所示:

CFLAGS += -DNAME=\"$(DISC)\"

在main.c中,需要包含基于makefile变量的正确光盘的标头。

有可能做

#include "NAME_header.h" 

(其中名称是从makefile传递的)

我遇到编译错误 错误:找不到NAME_header.h。

真的可以通过这种方式包含头文件吗?

2 个答案:

答案 0 :(得分:2)

可行的解决方案:

Makefile:

DISC := left
CFLAGS += -DNAME=$(DISC)

C或C ++源代码:

#define STR(s) STR2(s)
#define STR2(s) #s
#define EXPAND(s) s

#include STR(EXPAND(NAME)_header.h)

答案 1 :(得分:0)

替代解决方案; 考虑使用代理文件。请参阅下面有关混合宏和#include的更多详细信息。

在Makefile中,创建v_header.h

  

echo'#include“ $ {DISC} _header.h”'> v_header.h

可以包含哪些

  

#include“ v_header.h”

目前,cpp语法不允许'#include'语句的一部分使用宏。它必须是““ path.h””或“。预处理指令(以“#”开头的行)未处理“ stringifaction”运算符(“#”和“ ##”)

// Not working
#include NAME
#include #NAME
#include "#NAME"
#include "##NAME"