[CMake] How to read and compile dynamically-generated list of cpp files

Andreas Mohr andi at lisas.de
Mon Feb 3 15:51:25 EST 2014


Hi,

On Mon, Feb 03, 2014 at 12:00:02PM -0500, cmake-request at cmake.org wrote:
> Date: Mon, 3 Feb 2014 16:44:28 +0000
> From: gimmeamilk gimmeamilk <gimmeamilkbttf at googlemail.com>

> Hi all,
> 
> I have a custom tool that processes a given list of IDL files and
> produces a number of .cpp and .h files as output. I want to add those
> files to the list of things to compile in my CMakeLists, and also
> model the dependencies those files have on the IDL. To keep things
> simple, I will state that any change to any of the IDL files should
> trigger a regeneration of all cpp/h.
> 
> I have a custom command that takes care of running the generator tool
> and listing all the IDL files as dependencies.
> 
> My issue is getting the subsequent list of cpp/h files into cmake at
> build-time. It is not possible to infer from the name of the IDL files
> what cpp files will be generated. My generator tool will, however,
> output the list of generated files to a text file.
> 
> So my question is: how do I instruct cmake to "read from this text
> file and add the contents as extra source and header files to be
> compiled", also bearing in mind that the said text file only exists
> during a certain point of the build?

Judging from my (in?)sufficient amounts of CMake experience,
I'd say that's not possible, since we'd be talking build-time (IOW,
generator-type-specific) injection of dependencies into the generated
build system. But then CMake does have some amounts of "interesting"
features, so I might end up staying corrected
(the only feasible mechanism might be to configure the IDL user side
as an ExternalProject, to have its configure-time activity -
and thus its analysis of the generated text file -
happen during build-time execution of the main project).


I've been spending quite some time integrating (M?)IDL support into my
vcproj2cmake converter, so I know that several IDL compilers have
options for specifying specific files (IID header, proxy header, etc.).
And I'd expect such a capability to be required anyway,
since it's *fixed source files* content which thus has no choice
but to #include *specifically-named* files,
thus the build process would *have to* be able to custom-name
such output file names.
Plus, I can report that on .vc[x]proj files there are
rather liberal possibilities for custom-named patterns
of IDL-related output filenames.
So I'm mildly astonished that one would have a setup where this is NOT
the case.

BTW, it might be very worthwhile to provide an actual CMake LANGUAGE
configuration for your IDL compiler mechanism, for pretty automatic
specification of IDL files etc.
(but perhaps it's wise to choose a language identifier
other than a plain "IDL", since CMake might choose
to provide generic IDL support on its own eventually).

HTH (got milk?),

Andreas Mohr


More information about the CMake mailing list