[CMake] Makefile doesn't automatically create executable path as Ninja
Matthew Woehlke
matthew.woehlke at kitware.com
Tue Sep 3 13:33:42 EDT 2013
On 2013-09-03 13:21, Felipe Menezes Machado wrote:
> I'm having trouble understanding this behavior: what happens if the
> directory of the executable doesn't exist?
>
> I created a minimum example CMakeLists.txt (where foo.cpp is just a hello
> world):
>
> add_executable(test/test.bin foo.cpp)
>
> If the "test" directory doesn't exist, should the build system create it?
Well, ninja seems to think so :-).
> Does that depend on the build system?
Yes; ninja has a feature where it creates any non-existing directories
that are used by any outputs. At least make does not have a similar
feature. I don't know about other generators (e.g. xcode, msvc).
> I tested with make, it gives an error when executing "ld":
>
> /usr/bin/ld: cannot open output file test/test.bin: No such file or
> directory
>
> The command that generates the executable and gives the error is (from
> "make VERBOSE=1"):
>
> /usr/bin/c++ CMakeFiles/test/test.bin.dir/foo.cpp.o -o test/test.bin
> -rdynamic
>
> On the other hand, when I tested it with Ninja, it created the directory
> and finished without errors.
Interesting question. I suppose CMake could be taught to generate make
rules to emulate ninja's behavior.
Whether or not such a thing should be done is an interesting question.
(Especially as it probably should be done for all generators, it at all.)
--
Matthew
More information about the CMake
mailing list