为什么 add_definitions() 中的 '@' 会使 CMake 变得非常慢?
Why does '@' in add_definitions() make CMake incredibly slow?
当我将带有 @ 的预处理器定义添加到我的 CMake 脚本时,Configure 需要 10 倍的时间。
add_definitions(-DEMAIL="foo\@bar.com")
对此有任何见解或解决方案吗?
(我在 Windows 上使用 CMake-Gui for Visual C++ 2013。)
在 CMake 3.1 之前,CMake 中有一个未记录的功能:在 CMake 文件中,@var@
将扩展名为 var
的变量,类似于 ${var}
所做的。这可能与 configure_file()
的运作有关。 CMake 3.1 删除了此错误功能(@
-扩展仅保留用于配置的文件)。有关详细信息,请参阅 CMake docs 的相关部分。
我相信在 CMake C++ 代码中有一些点是根据对字符串中特殊字符的早期检查来选择快速直接使用路径或慢速解析和扩展路径。 @
的存在确实会触发寻找变量扩展等的慢速路径
如果可以,请使用 CMake 3.1 进行测试,看看这是否是导致速度下降的原因。
如果这没有帮助,或者要求 CMake 3.1 不适合您,您可以通过将 "offending" 宏放入头文件并将其包含在您的 C++ 代码中来解决此问题。如果宏的扩展需要依赖CMake变量,可以使用configure_file()
创建头文件
当我将带有 @ 的预处理器定义添加到我的 CMake 脚本时,Configure 需要 10 倍的时间。
add_definitions(-DEMAIL="foo\@bar.com")
对此有任何见解或解决方案吗?
(我在 Windows 上使用 CMake-Gui for Visual C++ 2013。)
在 CMake 3.1 之前,CMake 中有一个未记录的功能:在 CMake 文件中,@var@
将扩展名为 var
的变量,类似于 ${var}
所做的。这可能与 configure_file()
的运作有关。 CMake 3.1 删除了此错误功能(@
-扩展仅保留用于配置的文件)。有关详细信息,请参阅 CMake docs 的相关部分。
我相信在 CMake C++ 代码中有一些点是根据对字符串中特殊字符的早期检查来选择快速直接使用路径或慢速解析和扩展路径。 @
的存在确实会触发寻找变量扩展等的慢速路径
如果可以,请使用 CMake 3.1 进行测试,看看这是否是导致速度下降的原因。
如果这没有帮助,或者要求 CMake 3.1 不适合您,您可以通过将 "offending" 宏放入头文件并将其包含在您的 C++ 代码中来解决此问题。如果宏的扩展需要依赖CMake变量,可以使用configure_file()
创建头文件