[CMake] Get native build command with CMake 3+

Petr Kmoch petr.kmoch at gmail.com
Fri Dec 5 10:06:56 EST 2014


Hi Micha.

I understand how the original works, and I know I can work around it with a
separate buildsystem (using e.g. ExternalProject_Add() or ctest
--build-and-test). I was just wondering: since CMake generates a .sln (or
Makefile) in the subdirectory (because I put a project() call in there),
does it somehow offer a way to build the 'all' target from that solution
(or Makefile)?

Petr

On Fri, Dec 5, 2014 at 3:42 PM, Micha Hergarden <micha.hergarden at gmail.com>
wrote:

> 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/439222b0/attachment.html>


More information about the CMake mailing list