[CMake] Fwd: Generated file dependency

James Bigler jamesbigler at gmail.com
Thu Apr 23 11:50:23 EDT 2009


On Thu, Apr 23, 2009 at 9:39 AM, James Bigler <jamesbigler at gmail.com> wrote:

> On Thu, Apr 23, 2009 at 6:50 AM, Nikolay Mitev <face.mitev at gmail.com>wrote:
>
>> [posting to the list, since I accidentally replied only to Sergey]
>> On Thu, Apr 23, 2009 at 1:48 PM, Sergey Rudchenko <
>> sergey.rudchenko at gmail.com> wrote:
>>
>>> On Thu, 2009-04-23 at 13:37 +0300, Nikolay Mitev wrote:
>>> > Hi
>>> >
>>> > I have the following situation:
>>> >
>>> > files: test.cpp test.h
>>> >
>>> > I want to process the file test.cpp with a custom pre-processor which
>>> > will generate, say, test.ii.cpp which will get compiled into
>>> > libtest.a. test.cpp just includes test.h.
>>> >
>>> > This is my CMakeLists.txt file:
>>> >
>>> > cmake_minimum_required(VERSION 2.6)
>>> >
>>> > add_custom_command (OUTPUT test.ii.cpp
>>> >   COMMAND preprocess test.cpp test.ii.cpp
>>> >   DEPENDS test.cpp
>>> >   COMMENT "Creating test.ii.cpp"
>>> >   VERBATIM)
>>> >
>>> > add_library (test test.ii.cpp)
>>> >
>>> > All dandy, but when I modify test.h the preprocessing step is not run,
>>> > but just the compile step for test.ii.cpp. How can I make it so, that
>>> > when the header is modified the preprocessing and the compilation
>>> > steps are both run?
>>>
>>> Did you try to list the test.h in the DEPENDS list?
>>>
>>
>> Yes, and this works, but I really don't want to keep this list up-to-date
>> manually. The project involves hundreds of files, so I'm looking for a way
>> to automate this. Is there a way to extract the dependencies of test.cpp and
>> make test.ii.cpp depend on them?
>>
>>
>> Nikolay
>>
>>
> If you have a C or CXX language file look the documentation for
> add_custom_command and IMPLICIT_DEPENDS.
>
> James
>

I just realized that IMPLICIT_DEPENDS only works for the Makefile
generator.  If you need a more general solution, it requires a much bigger
hammer.  I have a cmake script that generates the dependency file (i.e. -M)
and does a bunch of CMake magic to maintain that dependency file and
encorporate those dependencies into the build system.

James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090423/b1bf7de0/attachment-0001.htm>


More information about the CMake mailing list