I have a build with two or three tools that generate headers and
source files. Getting the source files compiled is easy enough: when
they're mentioned as source files (in add_library or add_executable)
the custom rule gets triggered.

But that doesn't seem to be true for header files included by
non-generated source files, presumably because CMake's not looking at
those files, but rather Ninja is (presumably other generators will
behave similarly). If the (generated) header changes then anything
using
the source file gets rebuilt (as expected), but the first build seems
not to necessarily succeed (depending on accidents of when the
generated files are produced).

Concretely, suppose I have an XML file compat.xml with a custom rule
to generate messages/Compat.h, and some source files which include
that header (which does not exist to begin with), I'd like a compile
of any of those source files to depend on messages/Compat.h such that
it'll be generated if necessary.

That doesn't seem to happen automatically using the Ninja generator.
Is that expected, or have I messed something up?

For the moment I'm assuming it's as expected and have a workaround: a
simple Python script that scans source files and creates a deps.cmake
with calls
to add_file_dependencies. (Fortunately all the generated headers have
simple patterns so accurately determining them is straightforward.)

Unfortunately there are also (non-generated) header files which
include these headers and that seems harder to handle.
Calling add_file_dependencies on header files doesn't seem to work.

It's not a showstopper: I can just explicitly add some dependencies.
And later, we'll probably split out some of these things so they'll
be separate builds. It seems a bit annoying, though. Am I missing some
better way to handle this?
-- 

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