包含预处理器定义的文件

时间:2015-12-13 14:54:25

标签: c++ macros c-preprocessor include-path

我想要包含一个文件,并为路径使用预处理器定义。

// in projects preprocessor definitions:    
HEADER="../somePath/theHeader.h"

// in a file
#include HEADER

这适用于Windows,但XCode抱怨这个并且无法找到该文件。用路径替换HEADER有效,因此文件实际存在。那么,我错过了什么?

1 个答案:

答案 0 :(得分:4)

  

我错过了什么?

可能是足够的报价。在Unix上,你需要:

HEADER = "../somePath/theHeader.h"

${CC} ${CFLAGS} -DHEADER='${HEADER}' -c file.cpp

宏定义包括双引号。如果不将-DHEADER参数包装在单引号中,则shell(un)会帮助删除双引号。通过将它放在单引号内,shell有助于删除单引号,留下双引号,供编译器查看。

命令行处理的规则在Windows上有所不同,引号的处理方式与cmd.exe处理器不同。

顺便说一句,当我想让人类在命令行上指定HEADER的值时,我使用:

HEADER = ../somePath/theHeader.h

${CC} ${CFLAGS} -DHEADER='"${HEADER}"' -c file.cpp

现在我可以跑了:

make HEADER=/other/path/to/header.h file.o

它有效。用原始符号,我必须写:

make HEADER='"/other/path/to/header.h"' file.o

或类似的东西,如果你想使用命令输出来指定文件名,那就更加狡猾了,而且更加尴尬。将第一个选项与第二个选项进行比较:

make HEADER=$(locate header.h)
make HEADER="\"$(locate header.h)\""