Wie man kolorierte Ausgabe mit cmake?
Ich möchte die message-Funktion in CMakeLists.txt die Ausgabe farbiger text. Vielleicht escape-Sequenz.
Zum Beispiel
message("\x1b[31m;This text must be in red")
Es nicht funktionieren. Ich bekomme
Syntax-Fehler in der cmake-code auf
/home/taurus/cmakecolor/CMakeLists.txt:1
beim Parsen von string
\x1b[31m;This text must be in red
Ungültige escape-Sequenz \x
- Der Fehler ist, weil Sie nicht die Flucht der backslash. Sollte
message("\\x1b[31m;Red")
, aber das funktioniert immer noch nicht... - Kein Glück mit
cmake -E echo
entweder. Ich glaube nicht, dass es funktionieren würde nur mit CMake, werden Sie wahrscheinlich haben, um rufen Sie einen externen Befehl, wieecho
. - Hinzufügen eines literal-escape funktioniert gut für mich, wenn Sie editor erlaubt es. Zum Beispiel in vim einfügen-Modus geben
ctrl-v
gebenescape
und erhalten Sie ein einzelnes Zeichen^[
. Suchen Sie eine escape-Sequenz, die cmake tatsächlich Ehre noch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erweitern @grim die richtige Antwort, Sie können Dinge machen ein wenig bequemer, durch die Einrichtung von Variablen, die für die Abwicklung der verschiedenen Farben:
Wenn du wirklich Lust auf schieben das Boot aus, können Sie ersetzen die eingebaute
message
- Funktion mit Ihrer eigenen, die colourises die Ausgabe abhängig von der Art der Nachricht:Kann ich nicht sagen, dass ich empfehle, überschreiben Sie die eingebaute
message
auf diese Weise funktionieren, aber gesagt haben, dass, ich habe nicht gefunden, keine großen Probleme mit dies zu tun, entweder.Segmentation fault (core dumped)
für mich, wenn von mehreren Standorten.if($ENV{SHELL} MATCHES "bash|csh|zsh"
. ManchmalWIN32
vielleicht eine Schale, die unterstützt färben. Ich werde vorschlagen, ein edit 🙂if($ENV{SHELL}
würde wahrscheinlich genug sein...Eine einfachere Lösung ist wohl einfach zu CMake ' s built-in-Fähigkeit für emittierende farbige Ausgabe, d.h. diese Befehle
Verschiedenen Farben
Bold text
Keine neue Zeile
Von CMake können Sie die
execute_process()
Befehl zum aufrufen${CMAKE_COMMAND}
. Sie schreiben, könnte eine praktische Funktion, dies zu tun.UPDATE: Mit
cmake_echo_color
mitexecute_process()
Wie bereits von @sjm324 läuft
funktioniert nicht. Blick auf die Umsetzung https://github.com/Kitware/CMake/blob/10371cd6dcfc1bf601fa3e715734dbe66199e2e4/Source/kwsys/Terminal.c#L160
meine Vermutung ist, dass standard-Ausgang ist nicht an das terminal und so, wenn CMake ruft intern
isatty()
dies fehl.Habe ich zwei hacks, die dies umgehen, aber wirklich, wenn Sie das interessiert, sollten Sie sich an den CMake-Entwickler für eine weniger fragile Lösung
HACK 1:
CLICOLOR_FORCE=1
Umgebungsvariable.Dies ist keine gute Idee. Wenn Sie sich die Ausgabe des builds in eine Datei
es werden escape-Sequenzen in es, weil Sie Sie zu zwingen, werden
emittiert immer.
HACK 2: AUSGABEDATEI werden die TTY -
Tun das nicht. HACK 1 ist wahrscheinlich mehr tragbar.
execute_process(COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red --bold hello)
erhalten beraubt seine Farbe. Wenn es bei dir funktioniert bitte aktualisieren Sie Ihre Antwort mit genau das, was du getan hast?execute_process(...)
funktioniert nicht durch standard-Ausgabe nicht beigefügt ist ein terminal. Ich habe einige hacks machen das aber funktionieren.Zwar mühsam, können Sie eine variable definieren, enthält eine escape-Zeichen und verwenden Sie es in Ihrer Nachricht Saiten