[CMake] Get native build command with CMake 3+

Hendrik Sattler post at hendrik-sattler.de
Fri Dec 5 09:50:22 EST 2014


Hi,

this original makefile rule was probably just a simplification.
Make your custom target depend on all example targets which link the desired parts, then you get what the original makefile author just didn't want to do manually: having built all examples and their dependencies.
And it's less ugly...

HS


Am 5. Dezember 2014 11:46:03 MEZ, schrieb 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/6328e9a3/attachment-0001.html>


More information about the CMake mailing list