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

Reply via email to