[CMake] Get native build command with CMake 3+

Petr Kmoch petr.kmoch at gmail.com
Fri Dec 5 09:23:46 EST 2014


I assume you actually meant 'cmake --build . --target example_dir', the
name of the directory. 'examples' is the name of the custom target; if that
target's command was to build itself, I believe it would become a fork bomb.

Anyway, I tried it with the directory name, it doesn't work. I'm generating
with VS2008, and devenv was complaining about "Invalid project." Which kind
of makes sense, there is no 'example_dir' project in the solution.

On Fri, Dec 5, 2014 at 2:59 PM, David Cole <DLRdave at aol.com> wrote:

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20141205/7f02ae90/attachment.html>


More information about the CMake mailing list