Поскольку RULE_LAUNCH_COMPILE
задает префикс команды, а перенаправление потока идет в конце команды оболочки, использование ее таким образом не может работать.
Кроме того, команды, указанные в CMake, не являются командами оболочки. Это означает, что специальные символы не будут интерпретироваться и будут просто аргументами для команды.
Подводя итог, то, что вы пытаетесь сделать, будет расширено до чего-то вроде:
cmake -E time >> output_file.txt 2>&1 gcc...
Это будет выполняться не оболочкой, а самой CMake, поэтому произойдет сбой, поскольку время попытается выполнить команду с именем ">>".
Решение для вас - использовать промежуточныйскрипт, например:
@echo off
time %* >> output_file.txt
Давайте назовем это trace.cmd
. Использование %*
означает, что мы берем все аргументы в сценарий и передаем их в качестве аргументов команде time
.
Затем вы можете использовать его следующим образом:
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E trace.cmd")
Отказ от ответственности: я не проверял решение.