到目前为止,现有的C ++多项目在QT中使用了CMake 2.8。我们希望继续在Visual Studio 2010中维护它。我使用选项-G "Visual Studio 10"
在CMake中生成Visual Studio项目,但现在由于以下原因我无法编译它们:
在项目中,我们使用一个众所周知的宏,其本身在this question中进行了讨论。
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
宏在CMake中定义,以便将其作为预处理器定义提供给编译器(cl.exe):
add_definitions(-DDISALLOW_COPY_AND_ASSIGN\(TypeName\)=\" TypeName(const TypeName&)\; void operator=(const TypeName&)\; \")
Visual Studio不接受CMake的输出,并在代码中使用宏的任何地方抛出编译错误。什么是正确的语法,以便CMake可以为Visual Studio 2010正确生成它?
答案 0 :(得分:2)
我建议你不要使用宏,特别是这种情况。如果你可以使用boost,你可以私下继承boost::noncopyable
。如果不这样做,您可以定义自己的:
class noncopyable {
noncopyable(noncopyable const &);
void operator=(noncopyable const&);
protected:
noncopyable();
};
class Use : noncopyable
{
...
如果您坚持使用宏,请阅读将预处理代码转储到文件中所需的标志的编译器文档,并查看宏扩展到的内容。从那里你可以试着弄清楚出了什么问题。
答案 1 :(得分:2)
无法在cl的命令行上定义函数式宏。您可以通过在头文件中使用宏定义并使用cl的命令行选项/ FI传递此头文件来解决此问题。或者只是在必要时手动包含它(这可能更干净)。