为什么add_definitions()中的'@'会让CMake变得非常慢?

时间:2015-01-30 09:35:38

标签: cmake

当我在其CMake脚本中添加带有@的预处理器定义时,Configure需要10倍的时间。

add_definitions(-DEMAIL="foo\@bar.com")

有关此问题的任何见解或解决方案吗?

(我在Windows上使用CMake-Gui for Visual C ++ 2013。)

1 个答案:

答案 0 :(得分:4)

在CMake 3.1之前,CMake中有一个未记录的功能:在CMake文件中,@var@会扩展名为var的变量,类似于${var}。这可能与configure_file()的运作有关。 CMake 3.1删除了此错误(@ - 仅针对配置文件进行了扩展)。有关详细信息,请参阅CMake docs的相关部分。

我相信在CMake C ++代码中存在一些要点,其中基于对字符串中的特殊字符的早期检查来选择快速直接使用路径或慢速分析和扩展路径。 @的存在确实会触发寻找变量扩展等的慢速路径。

如果您有选项,请使用CMake 3.1进行测试,看看是否是导致速度减慢的原因。

如果这没有帮助,或者要求CMake 3.1不适合您,您可以通过放置"违规"来解决这个问题。将宏放入头文件中并将其包含在C ++代码中。如果宏的扩展需要依赖于CMake变量,则可以使用configure_file()来创建头文件。