Escaping $ dollar sign in rule variables with Ninja generator
CMake version 3.19.1, Linux Manjaro.
Potentially linked to #16395 .
cmake_minimum_required(VERSION 3.19)
project(ninja)
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_COMMAND} -E echo \"\$MONEY\$\"" "${CMAKE_CXX_LINK_EXECUTABLE}")
add_executable(main main.cpp)
When configuring with Makefiles generator, everything is ok:
$ cmake -S . -B m
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/cm3/m
$ cmake --build m
Scanning dependencies of target main
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main
$MONEY$
[100%] Built target main
However configuring with Ninja leads to creation of invalid ninjafile:
$ cmake -S . -B n -G Ninja
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/cm3/n
$ cmake --build n
ninja: error: CMakeFiles/rules.ninja:36: bad $-escape (literal $ must be written as $$)
command = $PRE_LINK && /usr/bin/cmake -E echo "$MONEY$" && /usr/bin/cl...
^ near here
Edited by Artalus