在使用 CMake 生成 visual studio 的项目时,setlocal 错误常见于添加或删除了文件但没有重新使用 CMake Generate 导致 vs 找不到文件。
今天遇到了另外一个场景——因为错误的宏定义导致的 setlocal 报错:
#define ADD_CONFIG_PROPERTY(type, name) \
Q_PROPERTY(type name READ name## WRITE name##Set NOTIFY name##Changed)\
public:\
type name##();\
void name##Set(type);\
Q_SIGNALS:\
void name##Changed();\
private:\
type name##_;\
这个错误十分的隐蔽,Q_PROPERTY 中的 READ 后我原本写的是 name##Get,然后我对这一句进行了修改,删去了 "Get" 却忘记删去了 "##" ,奇怪的是编译器在静态检查时并没有报错,反而是在编译时提示 setlocal 错误,只需要把宏定义中的 Q_PROPERTY 一句修正即可。
Q_PROPERTY(type name READ name WRITE name##Set NOTIFY name##Changed)