我在 makefile 中传递了一个编译器选项,DPATH
名为DPATH=/path/to/somefile
. 基于此,我必须编写一个宏:-
#if "$(DPATH)"=="/path/to/x"
#error no x allowed
#endif
如何DPATH
与预处理器条件测试中的字符串进行比较?
在预处理器中不可能做到这一点。#if
只能评估不引用函数或变量的整数表达式。所有在宏扩展中幸存的标识符都被零替换,并且字符串常量会触发自动语法错误。
在不了解您的问题的情况下,我建议编写一个在构建期间编译和执行的小型测试程序,如果测试未通过,Makefile goo 会使构建失败。
#include <stdio.h>
#include <string.h>
int main(void)
{
if (!strcmp(DPATH, "/path/to/x") || some1 == 3 || some2 == 7 || ...)
{
fputs("bogus configuration\n", stderr);
return 1;
}
return 0;
}
接着
all : validate_configuration
validate_configuration: config_validator
if ./config_validator; then touch validate_configuration; else exit 1; fi
config_validator: config_validator.c
# etc