我想在CMakeLists.txt
中有一个消息函数,输出彩色文本。也许是一个转义序列。
例如:
message("\x1b[31m;This text must be in red")
它不工作。我得到:
Syntax error in cmake code at
/home/taurus/cmakecolor/CMakeLists.txt:1
when parsing string
\x1b[31m;This text must be in red
Invalid escape sequence \x
4条答案
按热度按时间myzjeezk1#
为了扩展@grim的正确答案,可以通过设置变量来处理各种颜色,从而使事情变得更方便:
如果你真的想把船推出去,你可以用你自己的函数替换内置的
message
函数,它根据消息类型给输出着色:我不能说我建议以这种方式覆盖内置的
message
函数,但话虽如此,我也没有发现这样做有什么大问题。5ssjco0h2#
一个更简单的解决方案可能是使用CMake的内置功能来发出彩色输出,即以下命令
不同颜色
粗体文本
无新行
在CMake中,您可以使用
execute_process()
命令来调用${CMAKE_COMMAND}
。您可以编写一个方便的函数来执行此操作。更新:将
cmake_echo_color
与execute_process()
配合使用正如@sjm324运行时所指出的
不起作用。请查看实现https://github.com/Kitware/CMake/blob/10371cd6dcfc1bf601fa3e715734dbe66199e2e4/Source/kwsys/Terminal.c#L160
我的猜测是标准输出没有附加到终端,因此当CMake内部调用
isatty()
时,会失败。我有两个解决这个问题的方法,但是如果你真的关心这个问题,你应该联系CMake开发人员,寻求一个不那么脆弱的解决方案
HACK 1:设置
CLICOLOR_FORCE=1
环境变量。这不是一个好主意。如果你把编译的输出记录到一个文件中,它会有转义序列,因为你强迫它们总是被发出。
HACK 2:将OUTPUT_FILE设置为TTY
不要这样做。HACK 1可能更便于携带。
xsuvu9jc3#
虽然很繁琐,但您可以定义一个包含转义符的变量,并在消息字符串中使用它
x0fgdtte4#
运行execute_process并将输出分配给VARIBALE,然后使用该消息进行打印。
没有黑客