C中预处理器条件下的字符串比较

我在makefile中传递一个名为DPATH的编译器选项,类似于DPATH=/path/to/somefile 。 基于此,我必须写一个宏,这样:

 #if "$(DPATH)"=="/path/to/x" #error no x allowed #endif 

如何将DPATH与预处理器条件测试中的字符串进行比较?

在预处理器中无法执行此操作。 #if只能评估不引用函数或变量的整数表达式。 宏扩展后的所有标识符都被零替换,字符串常量触发自动语法错误。

在不了解您的问题的情况下,我建议编写一个在构建期间编译和执行的微小测试程序,如果测试没有通过,Makefile goo将使构建失败。

 #include  #include  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