如何用单个换行来格式化CMake的错误信息?
使用CMake 3.25,我想打印一个结构如下的错误信息:
Error message. Possible reasons:
- reason 1
- reason 2
我尝试了一个简单的message命令,使用多行字符串:
message (FATAL_ERROR "Error message. Possible reasons:
- reason 1
- reason 2")
但输出中的每个换行都被重复了一次,因此输出行之间出现空行:
Error message. Possible reasons:
- reason 1
- reason 2
尝试了多次使用双引号括起来的字符串:
message (FATAL_ERROR "Error message. Possible reasons:"
"- reason 1"
"- reason 2")
但根本没有换行:
Error message. Possible reasons:- reason 1- reason 2
尝试在每行的末尾添加换行符:
message (FATAL_ERROR "Error message. Possible reasons:\n"
"- reason 1\n"
"- reason 2")
尝试在一行的一个字面量中添加换行符:
message (FATAL_ERROR "Error message. Possible reasons:\n- reason 1\n- reason 2")
但再次,每个“\n”都被复制了
Error message. Possible reasons:
- reason 1
- reason 2
尝试将错误信息保存到一个变量中,并将该变量传给message(FATAL_ERROR),无论带不带引号,结果都一样,都是 'success'。
尝试使用一些 [=[]=] 语法,我并不怎么熟悉:
message(FATAL_ERROR [=[Error message. Possible reasons:
- reason 1
- reason 2]=])
但每个换行仍然被重复。
有何想法吗?
解决方案
tl;dr: 似乎并不支持 :-(
阅读 关于 message() 命令 的文档,我们发现:
CMake Warning and Error message text displays using a simple markup language. Non-indented text is formatted in line-wrapped paragraphs delimited by newlines. Indented text is considered pre-formatted.
这有点含糊,但我认为发生的情况如下:
- 所有字符串片段都会被连接在一起(即
"foo" "bar" "baz"与"foobarbaz"相同)。 - 如果遇到段落末尾 — 即换行字符 —,它会被替换为两个换行符 — 段落末尾和“分隔符”。
因此,没有办法得到一个 单独的 换行,只能得到成对的换行。这看起来有点怪,但经过一些试验,我得出了这个不幸的结论。请证明我错了!
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。