[CMake] Get native build command with CMake 3+

Micha Hergarden micha.hergarden at gmail.com
Fri Dec 5 09:42:58 EST 2014


Hello Petr,

In your example the original make command simply states that it should
switch to the example_dir and build an 'all' target there. It does not
specify how this target is build. That is the part that should end up in
your custom command. You can name the command 'examples', set WORKING_DIR
to the example_dir and then perform the steps needed to build. If you want
that to be a separate cmake based solution, you may want to take a look at
the external_project module.

With kind regards,
Micha Hergarden

2014-12-05 11:46 GMT+01:00 Petr Kmoch <petr.kmoch at gmail.com>:

> Hi all.
>
> I'm converting a small Makefile-based project to CMake. The project is not
> mine, so I am trying to match its existing buildsystem as closely as
> possible.
>
> One of the rules in the original Makefile is (simplified) as follows:
>
> examples: all
>   make -C example_dir all
>
> This gives a target 'examples' in the top-level Makefile, which is not
> included in 'all', but can be used to build all examples. I would like to
> achieve something similar with CMake.
>
> I added example_dir/CMakeLists.txt, which includes a project() command and
> defines all the targets for example executables. In the toplevel CMakeList,
> I did this:
>
> # Add the subdirectory but don't include its targets by default
> add_subdirectory(example_dir EXCLUDE_FROM_ALL)
>
> # Add a custom target to build all examples
> add_custom_target(examples ???)
>
> I'm stuck at the custom target. What I need for its command is a
> generator-agnostic equivalent for 'make -C example_dir all' (or 'make -f
> example_dir/Makefile all').
>
> I tried 'cmake --build ${CMAKE_CURRENT_BINARY_DIR}/example_dir ...', but
> this complains that example_dir does not contain a CMakeCache.txt (which is
> correct of course, it's not the toplevel directory). Then I remembered that
> build_command() can be used to get a command line to build a project;
> unfortunately, in 3.0 and later, this just returns 'cmake --build ...' and
> so is unusable in my situation.
>
> Is there a way to query CMake for the native command line (or something
> else) I could use to build the CMake-generated buildsystem in the
> subdirectory? I thought a bit about CMAKE_MAKE_PROGRAM, but that doesn't
> tell me anything about what arguments I should pass, and it's not even set
> on Visual Studio generators.
>
> As a workaround, I thought of not doing add_subdirectory() at all and
> instead adding a custom target with 'ctest --build-and-test ...', but I
> would prefer to configure & generate the two directories together. I plan
> to eventually add install() rules for the examples as well, and the
> examples also use one of the targets from the toplevel cmakelist in
> add_custom_command(OUTPUT ...), so I would really like to keep them as one
> CMake system. Is there a way to do so?
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20141205/39cd2487/attachment.html>


More information about the CMake mailing list