[CMake] Get native build command with CMake 3+

David Cole DLRdave at aol.com
Fri Dec 5 08:59:51 EST 2014


Try:

cmake --build . --target examples

(where "." represents the current working directory, and assumes
you're in the top level build tree...)


On Fri, Dec 5, 2014 at 5:46 AM, Petr Kmoch <petr.kmoch at gmail.com> wrote:
> 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


More information about the CMake mailing list