如何在CMake 3.25中格式化带单个换行的错误信息?
CMake 3.25 格式化FATAL_ERROR输出的正确方法
要输出你需要的无空行、格式规整的错误信息,有两种可靠的解决方式:
方法一:单行字符串显式指定换行符
直接在双引号包裹的字符串中用\n定义换行,同时手动添加缩进空格:
message(FATAL_ERROR "Error message. Possible reasons:\n - reason 1\n - reason 2")
方法二:用string(JOIN)拼接多行内容
如果需要代码保持多行结构以提升可读性,可通过string(JOIN)将各行用单个换行符连接后输出:
string(JOIN "\n" ERROR_MSG "Error message. Possible reasons:" " - reason 1" " - reason 2" ) message(FATAL_ERROR "${ERROR_MSG}")
问题根源
你之前遇到的换行重复、空行问题,是因为CMake的message(FATAL_ERROR)处理双引号包裹的多行代码字符串时,会把代码中手动敲回车产生的原始换行,和命令输出时自动添加的换行叠加,导致每行之间多出一个空行。而上述两种方法都是通过明确控制换行符的数量,避免了叠加问题。
另外你尝试的原始字符串语法[=[...]=]会完全保留所有原始字符(包括代码中的换行),因此同样会触发重复换行的问题,不适合此场景。
内容的提问来源于stack exchange,提问作者Lyubomir Filipov
相关产品推荐
相关产品推荐

