target_link_options: $ signs are duplicated in ninja/makefile generators
CMake outputs two $ signs for a single $ sign for target_link_options
# CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(EmbindFunctionPointers)
add_executable(main main.cpp)
target_link_options(main PRIVATE
"-lembind"
"-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"$addFunction\"'"
"-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'"
"-sALLOW_TABLE_GROWTH=1")
Output of ninja dry run:
ninja -nv
[1/1] : && ../emsdk/upstream/emscripten/em++ -lembind "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"\$$addFunction\"'" "-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'" -sALLOW_TABLE_GROWTH=1 CMakeFiles/main.dir/main.cpp.o -o main.js && :
Output of link.txt:
$ cat CMakeFiles/main.dir/link.txt
../emsdk/upstream/emscripten/em++ -lembind "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"\$$addFunction\"'" "-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'" -sALLOW_TABLE_GROWTH=1 @CMakeFiles/main.dir/objects1 -o main.js
After escaping the dollar sign:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(EmbindFunctionPointers)
add_executable(main main.cpp)
target_link_options(main PRIVATE
"-lembind"
"-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"\$addFunction\"'"
"-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'"
"-sALLOW_TABLE_GROWTH=1")
Output of ninja dry run with escaped $ sign.
ninja -nv
[1/1] : && ../emsdk/upstream/emscripten/em++ -lembind "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"\$$addFunction\"'" "-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'" -sALLOW_TABLE_GROWTH=1 CMakeFiles/main.dir/main.cpp.o -o main.js && :
Output of link.txt with escaped $ sign:
$ cat CMakeFiles/main.dir/link.txt
../emsdk/upstream/emscripten/em++ -lembind "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='\"\$$addFunction\"'" "-sEXPORTED_RUNTIME_METHODS='\"addFunction\"'" -sALLOW_TABLE_GROWTH=1 @CMakeFiles/main.dir/objects1 -o main.js
Edited by Jaswant Panchumarti (Kitware)