包含带有预处理器定义的文件
include file with preprocessor define
我想包含一个文件并对路径使用预处理器定义。
// in projects preprocessor definitions:
HEADER="../somePath/theHeader.h"
// in a file
#include HEADER
这适用于 Windows,但 XCode 对此抱怨并且找不到文件。将 HEADER
替换为路径有效,因此该文件确实存在。那么,我错过了什么?
What am I missing?
可能引用足够了。在 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)\""
我想包含一个文件并对路径使用预处理器定义。
// in projects preprocessor definitions:
HEADER="../somePath/theHeader.h"
// in a file
#include HEADER
这适用于 Windows,但 XCode 对此抱怨并且找不到文件。将 HEADER
替换为路径有效,因此该文件确实存在。那么,我错过了什么?
What am I missing?
可能引用足够了。在 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)\""