add_custom_command and CONFIG-dependent output

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

add_custom_command and CONFIG-dependent output

braden
I'm trying to do this:

     set(LIB_STAGEDIR "${STAGEDIR}/lib/$<CONFIG>")
     add_custom_command(
         OUTPUT ${LIB_STAGEDIR}
         COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_STAGEDIR}
     )

…and CMake complains thusly:

   add_custom_command called with OUTPUT containing a "<".  This
character is
   not allowed.

Is there some way to specify OUTPUT when it is dependent on the value
of $<CONFIG> or similar?

--
Braden McDaniel
<[hidden email]>

--

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
--
Braden McDaniel <braden@endoframe.com>
Reply | Threaded
Open this post in threaded view
|

Re: add_custom_command and CONFIG-dependent output

CMake mailing list
Use "${CMAKE_CFG_INTDIR}" in the context of add_custom_command OUTPUT,
not $<CONFIG>.

You may also use that in the COMMAND arguments.

See documentation here:
http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_CFG_INTDIR.html

The $<> generator expressions are relatively new, and do not work in
all contexts that you might expect yet. CMAKE_CFG_INTDIR has been
around for quite some time, though, and works very well with custom
commands.


HTH,
David C.



--

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: add_custom_command and CONFIG-dependent output

braden
On Fri, 2014-08-22 at 16:58 -0400, David Cole via CMake wrote:

> Use "${CMAKE_CFG_INTDIR}" in the context of add_custom_command OUTPUT,
> not $<CONFIG>.
>
> You may also use that in the COMMAND arguments.
>
> See documentation here:
> http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_CFG_INTDIR.html
>
> The $<> generator expressions are relatively new, and do not work in
> all contexts that you might expect yet. CMAKE_CFG_INTDIR has been
> around for quite some time, though, and works very well with custom
> commands.

Ah, thanks... Though, I think there may be a general disconnect here:
that is, it seems likely that one would want to construct output with a
pattern composed from generator expressions.  For instance, in a
subsequent rule I attempted to do this:

    set(LIB "$<TARGET_FILE:${LIBRARY_TARGET}>")
    set(STAGED_LIB "${LIB_STAGEDIR}/$<TARGET_FILE_NAME:${LIBRARY_TARGET}>")
    add_custom_command(
        OUTPUT ${STAGED_LIB}
        COMMAND ${CMAKE_COMMAND} -E copy ${LIB} ${STAGED_LIB}
        MAIN_DEPENDENCY ${LIB_STAGEDIR}
    )

... which obviously has the same problem.

While I gather from your comment that something like this might be
possible in the future, is there some other general approach that can be
taken with current CMake?

Braden


--

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
--
Braden McDaniel <braden@endoframe.com>
Reply | Threaded
Open this post in threaded view
|

Re: add_custom_command and CONFIG-dependent output

CMake mailing list
In reply to this post by braden
> Ah, thanks... Though, I think there may be a general disconnect here:
> that is, it seems likely that one would want to construct output with
> a pattern composed from generator expressions.
> ...
> While I gather from your comment that something like this might be
> possible in the future, is there some other general approach that can
> be taken with current CMake?


The "disconnect" is that generator expressions were bolted on top of
existing CMake functionality, and are not fully supported in all
contexts. The documentation for add_custom_command [1] explicitly says
"Arguments to COMMAND may use “generator expressions”" -- but it says
nothing about OUTPUT using them at all.

I don't know if there's a strong reason behind not supporting them in
the OUTPUT clause... but I suspect if it was easy, it would have been
done already.

For now, any OUTPUT you need to specify will have to be done without
the use of generator expressions. In some cases, that means you need to
know what the behavior of CMake is (like the library file name in your
example), and duplicate it if you need it in the OUTPUT clause. So, no:
no general approach that I know of, but you can use CMAKE_CFG_INTDIR as
needed to separate the output of different config builds...

(If I'm wrong here, I do hope somebody else more intimately involved
with generator expressions will chime in and correct me.)


HTH,
David C.


[1] http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html



--

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: add_custom_command and CONFIG-dependent output

Petr Kmoch
On Mon, Aug 25, 2014 at 1:07 PM, David Cole via CMake <[hidden email]> wrote:
> Ah, thanks... Though, I think there may be a general disconnect here:
> that is, it seems likely that one would want to construct output with
> a pattern composed from generator expressions.
> ...
> While I gather from your comment that something like this might be
> possible in the future, is there some other general approach that can
> be taken with current CMake?


The "disconnect" is that generator expressions were bolted on top of
existing CMake functionality, and are not fully supported in all
contexts. The documentation for add_custom_command [1] explicitly says
"Arguments to COMMAND may use “generator expressions”" -- but it says
nothing about OUTPUT using them at all.

I don't know if there's a strong reason behind not supporting them in
the OUTPUT clause... but I suspect if it was easy, it would have been
done already.

Brad suggests it's far from easy in this bug comment: http://public.kitware.com/Bug/view.php?id=12877#c28315
 

For now, any OUTPUT you need to specify will have to be done without
the use of generator expressions. In some cases, that means you need to
know what the behavior of CMake is (like the library file name in your
example), and duplicate it if you need it in the OUTPUT clause. So, no:
no general approach that I know of, but you can use CMAKE_CFG_INTDIR as
needed to separate the output of different config builds...

(If I'm wrong here, I do hope somebody else more intimately involved
with generator expressions will chime in and correct me.)


HTH,
David C.


[1] http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html

Petr

--

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