Passing options into COMMAND inside of add_custom_target() or add_custom_command()

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Passing options into COMMAND inside of add_custom_target() or add_custom_command()

Martin Mitáš

Hello,

I'm trying to pass multiple options from outside to a command in add_custom_target()
or add_custom_command(). I am new to CMake and I don't know whether the observed
behavior is bug or I do it in a wrong way.

I am doing all this with CMake 3.0 on Windows within MSYS environment if it
plays some role.

A test demonstrating the issue follows (using 'ls' as the command and '-l -h'
as the options):

# ==== CMakeLists.txt ====
cmake_minimum_required(VERSION 3.0)
project(test_project)

set(MYTOOL "ls")

add_custom_target(
    x ALL
    COMMAND ${MYTOOL} ${MYTOOL_FLAGS}
    COMMENT "test"
    VERBATIM
)
# ==== End of CMakeLists.txt ====


Using the CMakeLists.txt above, I get this:

$ mkdir build  &&  cd build
$ cmake -G "MSYS Makefiles" -DMYTOOL_FLAGS="-l -h" ..
... (unimportant output censored)
$ make VERBOSE=1
... (unimportant output censored)
[100%] test
ls "-l -h"
ls: invalid option --
Try `ls --help' for more information.
make[2]: *** [CMakeFiles/x] Error 2
make[2]: Leaving directory `/prj/pok/build'
make[1]: *** [CMakeFiles/x.dir/all] Error 2
make[1]: Leaving directory `/prj/pok/build'
make: *** [all] Error 2


As can be seen, CMake propagates the contents of ${MYTOOL_FLAGS} as a single
option into 'ls', i.e. generated Makefile attempts to execute

        ls "-l -h"

instead of

        ls -l -h

Any ideas how to do this correctly?

Thanks,
Martin


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Passing options into COMMAND inside of add_custom_target() or add_custom_command()

Kornel Benko
Am Samstag, 28. Juni 2014 um 12:06:56, schrieb Martin Mitáš <[hidden email]>

>
> Hello,
>
> I'm trying to pass multiple options from outside to a command in add_custom_target()
> or add_custom_command(). I am new to CMake and I don't know whether the observed
> behavior is bug or I do it in a wrong way.
>
> I am doing all this with CMake 3.0 on Windows within MSYS environment if it
> plays some role.
>
> A test demonstrating the issue follows (using 'ls' as the command and '-l -h'
> as the options):
>
> # ==== CMakeLists.txt ====
> cmake_minimum_required(VERSION 3.0)
> project(test_project)
>
> set(MYTOOL "ls")
>
> add_custom_target(
>     x ALL
>     COMMAND ${MYTOOL} ${MYTOOL_FLAGS}
>     COMMENT "test"
>     VERBATIM
> )
> # ==== End of CMakeLists.txt ====
>
>
> Using the CMakeLists.txt above, I get this:
>
> $ mkdir build  &&  cd build
> $ cmake -G "MSYS Makefiles" -DMYTOOL_FLAGS="-l -h" ..
> ... (unimportant output censored)
> $ make VERBOSE=1
> ... (unimportant output censored)
> [100%] test
> ls "-l -h"
> ls: invalid option --
So 'ls' got '-l -h' as one paramater.
I would use
1.) -DMYTOOL_FLAGS="-lh"

or
2.) -DMYTOOL_FLAGS="-l;-h"

> Try `ls --help' for more information.
> make[2]: *** [CMakeFiles/x] Error 2
> make[2]: Leaving directory `/prj/pok/build'
> make[1]: *** [CMakeFiles/x.dir/all] Error 2
> make[1]: Leaving directory `/prj/pok/build'
> make: *** [all] Error 2
>
>
> As can be seen, CMake propagates the contents of ${MYTOOL_FLAGS} as a single
> option into 'ls', i.e. generated Makefile attempts to execute
>
> ls "-l -h"
>
> instead of
>
> ls -l -h
>
> Any ideas how to do this correctly?
>
> Thanks,
> Martin
>
        Kornel
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

signature.asc (501 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Passing options into COMMAND inside of add_custom_target() or add_custom_command()

Hendrik Sattler


On 28. Juni 2014 18:00:52 MESZ, Kornel Benko <[hidden email]> wrote:

>Am Samstag, 28. Juni 2014 um 12:06:56, schrieb Martin Mitáš
><[hidden email]>
>>
>> Hello,
>>
>> I'm trying to pass multiple options from outside to a command in
>add_custom_target()
>> or add_custom_command(). I am new to CMake and I don't know whether
>the observed
>> behavior is bug or I do it in a wrong way.
>>
>> I am doing all this with CMake 3.0 on Windows within MSYS environment
>if it
>> plays some role.
>>
>> A test demonstrating the issue follows (using 'ls' as the command and
>'-l -h'
>> as the options):
>>
>> # ==== CMakeLists.txt ====
>> cmake_minimum_required(VERSION 3.0)
>> project(test_project)
>>
>> set(MYTOOL "ls")
>>
>> add_custom_target(
>>     x ALL
>>     COMMAND ${MYTOOL} ${MYTOOL_FLAGS}
>>     COMMENT "test"
>>     VERBATIM
>> )
>> # ==== End of CMakeLists.txt ====
>>
>>
>> Using the CMakeLists.txt above, I get this:
>>
>> $ mkdir build  &&  cd build
>> $ cmake -G "MSYS Makefiles" -DMYTOOL_FLAGS="-l -h" ..
>> ... (unimportant output censored)
>> $ make VERBOSE=1
>> ... (unimportant output censored)
>> [100%] test
>> ls "-l -h"
>> ls: invalid option --
>
>So 'ls' got '-l -h' as one paramater.
>I would use
>1.) -DMYTOOL_FLAGS="-lh"
>
>or
>2.) -DMYTOOL_FLAGS="-l;-h"

Or maybe escaping on the shell as
"-DMYTOOL_FLAGS=-l -h"
also works?

>> Try `ls --help' for more information.
>> make[2]: *** [CMakeFiles/x] Error 2
>> make[2]: Leaving directory `/prj/pok/build'
>> make[1]: *** [CMakeFiles/x.dir/all] Error 2
>> make[1]: Leaving directory `/prj/pok/build'
>> make: *** [all] Error 2
>>
>>
>> As can be seen, CMake propagates the contents of ${MYTOOL_FLAGS} as a
>single
>> option into 'ls', i.e. generated Makefile attempts to execute
>>
>> ls "-l -h"
>>
>> instead of
>>
>> ls -l -h
>>
>> Any ideas how to do this correctly?
>>
>> Thanks,
>> Martin
>>
>
> Kornel
>
>------------------------------------------------------------------------

--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Passing options into COMMAND inside of add_custom_target() or add_custom_command()

Kornel Benko
Am Samstag, 28. Juni 2014 um 19:21:50, schrieb Hendrik Sattler <[hidden email]>

> >So 'ls' got '-l -h' as one paramater.
> >I would use
> >1.) -DMYTOOL_FLAGS="-lh"
> >
> >or
> >2.) -DMYTOOL_FLAGS="-l;-h"
>
> Or maybe escaping on the shell as
> "-DMYTOOL_FLAGS=-l -h"
> also works?
This is identical to -DMYTOOL_FLAGS="-l -h". The shell simply removes quotes. The command
(in this case cmake) get this (as one) parameter '-DMYTOOL_FLAGS=-l -h' including the blank.
So it should not work.

        Kornel
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

signature.asc (501 bytes) Download Attachment