[CMake] Is it possible for CMake to generate unescaped quotes on the (bash) command line as a result of add_custom_command?

Alan W. Irwin irwin at beluga.phys.uvic.ca
Fri Apr 13 15:48:10 EDT 2018


Hi Nils:

I am asking this question directly of you because in the past (at
<https://cmake.org/Bug/view.php?id=15898>) you stated

"To pass quotes directly to the command either [["foo"]] or \"foo\"
should work."

But that doesn't work for me (using make and the bash command-line on
Linux), and instead with either of those two methods I get escaped
quotes on the command-line.

My use case (for add_custom_command with
VERBATIM and cmake 3.6.2 or higher) is as follows:

COMMAND test-drv-info
${LIBRARY_TARGET_PREFIX} ${SOURCE_ROOT_NAME}
> ${CMAKE_CURRENT_BINARY_DIR}/test_dyndrivers_dir/${SOURCE_ROOT_NAME}.driver_info

that translates to

./test-drv-info temporary_target_ ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info

on the command line which is correct for the case when
LIBRARY_TARGET_PREFIX has been set to "temporary_target_".  But when
LIBRARY_TARGET_PREFIX is set to the empty string the result is

./test-drv-info  ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info

However, that is wrong since that command currently needs two arguments even if
one of them is empty.  So instead I need the generated command to be

./test-drv-info "temporary_target_" ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info

or

./test-drv-info "" ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info

depending on how LIBRARY_TARGET_PREFIX is set.

Is it possible to implement that?  If I try your (historical)
suggestion above, I get instead

./test-drv-info \"temporary_target_\" ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info

or

./test-drv-info \"\" ps > /home/software/plplot/HEAD/build_dir/drivers/test_dyndrivers_dir/ps.driver_info


which isn't correct since unescaped quotes are needed on the generated command
line rather than escaped ones.

If the answer is unescaped quotes are not possible on the generated
command line, that is fine since there are multiple ways to work
around that CMake limitation (e.g., by changing the test-drv-info
executable to check the number of arguments and act differently if one
of them is missing). But in light of your quote above, I just want to
make sure I am not missing some obvious way that CMake can generate
unescaped quotes on the command-line.

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________


More information about the CMake mailing list