[CMake] Generate a file with a custom command as part of build

doug livesey biot023 at gmail.com
Wed Jan 25 02:22:56 EST 2017


Is there any way that I can make the files webpack compiles into
dependencies for the Webpack task? So that any changes to those are picked
up for recompilation?
No worries if not, I just thought it would be nice.

On 25 January 2017 at 07:19, doug livesey <biot023 at gmail.com> wrote:

> Perfect, thankyou so much!
> That nailed it!
>
> On 24 January 2017 at 20:52, Michael Ellery <mellery451 at gmail.com> wrote:
>
>> The syntax of your add_custom_target is not quite right…I would try
>> something more like:
>>
>> add_custom_target( Webpack ALL
>>     $WEBPACK
>>     DEPENDS  webpack.config.js
>>     BYPRODUCTS  public/bundle.js
>> )
>>
>> …that’s untested, of course. I you do that, then I think you don’t need
>> the add_custom_command at all….but you will still want to make some of your
>> other targets depend on this target if they need bundle.js before they run.
>>
>> > On Jan 24, 2017, at 11:34 AM, doug livesey <biot023 at gmail.com> wrote:
>> >
>> > Hi -- sorry about the really late reply, I've been away. Up to
>> Hadrian's Wall, and then for a Dark Skies observatory evening.
>> > It was ace. :)
>> > I've added the following to my CMakeLists.txt file:
>> >
>> > > set(WEBPACK ${CMAKE_SOURCE_DIR}/node_modules/.bin/webpack)
>> > > configure_file(webpack.config.js webpack.config.js)
>> > > add_custom_target(public/bundle.js)
>> > > add_custom_command(OUTPUT public/bundle.js COMMAND ${WEBPACK})
>> >
>> > However, when I try to run `cmake ..` (I'm using a build subdirectory),
>> I get the following error:
>> >
>> > > CMake Error at CMakeLists.txt:30 (add_custom_target):
>> > >   add_custom_target called with invalid target name
>> "public/bundle.js".
>> > >   Target names may not contain a slash.  Use ADD_CUSTOM_COMMAND to
>> generate
>> > >   files.
>> >
>> > I'm guessing that this means that I should be running some of those
>> commands in a CMakeLists.txt file in a subdirectory (maybe public/) and
>> calling `add_subdirectory(public)` from my top-level file?
>> > I've tried this a couple of ways, but so far haven't got it working.
>> > Am I on the right sort of approach, or have I wandered far from the
>> beaten track?
>> > Thanks again for your help,
>> >    Doug.
>> >
>> > On 22 January 2017 at 00:16, Michael Ellery <mellery451 at gmail.com>
>> wrote:
>> > add_custom_command is the probably the right thing…but it needs to be
>> triggered by a dependency relationship. You will specify public/bundle.js
>> as the OUTPUT parameter of the add_custom_command and then some other
>> target or install command needs to have that file listed in its sources,
>> and then CMAKE will understand that it needs to run the custom command to
>> generate that OUTPUT file before it runs the dependent target. I think
>> add_custom_command can also be explicitly linked to a specific target
>> (there are two forms of the command) - and in that case I think it always
>> runs (?) when that target rebuilds…I’m not completely sure about that, so
>> you might need to test.
>> >
>> > Alternatively, if you want to run the generation at the time of
>> makefile generation (when CMAKE is run…), then have a look at
>> execute_process. The downside of that is that it will generally always run
>> when CMAKE is run, but never during the make process so it doesn’t really
>> handle updates to the source (input) files very well. I’m not sure which
>> technique applies best to your situation here.
>> >
>> > HTH,
>> > Mike
>> >
>> > > On Jan 21, 2017, at 4:01 PM, doug livesey <biot023 at gmail.com> wrote:
>> > >
>> > > Hi, I want to call the following command as part of a build:
>> > >
>> > > $ ./node_modules/.bin/webpack
>> > >
>> > > This should generate a file public/bundle.js
>> > >
>> > > I'm really struggling with this. I guess there's something
>> fundamental that I'm not understanding. `add_custom_command` doesn't seem
>> to be doing anything.
>> > > I would anticipate that it would put the command I want to call in
>> the makefile, but it hasn't.
>> > > If anyone could advise me on what I'm not getting here, that would be
>> brilliant.
>> > > Cheers,
>> > >    Doug.
>> > > --
>> > >
>> > > 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
>> >
>> >
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170125/ac49288b/attachment.html>


More information about the CMake mailing list