[CMake] Dependency rule not included

Vivien Delmon vivien.delmon at creatis.insa-lyon.fr
Wed Dec 8 10:28:18 EST 2010


On 12/08/2010 04:13 PM, Michael Wild wrote:
> On 12/08/2010 03:54 PM, Micha Renner wrote:
>> Am Mittwoch, den 08.12.2010, 14:55 +0100 schrieb Vivien Delmon:
>>> CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
>>> ADD_CUSTOM_COMMAND(OUTPUT toto.h toto.c
>>>      COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_totoc_totoh.sh
>>> )
>> SET_SOURCE_FILES_PROPERTIES(toto.h toto.c PROPERTIES GENERATETED TRUE)
>>
>> See:
>> http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_source_files_properties
>> and:
>> http://www.cmake.org/cmake/help/cmake-2-8-docs.html#prop_sf:GENERATED
>>
>>
>>> INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
>>> ADD_LIBRARY(titi toto.c)
>>> ADD_LIBRARY(tata tata.c)
>>
>> Greetings
>> Micha
>>
>
>
> the GENERATED property is set automatically by ADD_CUSTOM_COMMAND. But I
> suspect the problem is that you used a relative path in your OUTPUT
> option. *Always* specify full paths in the OUTPUT and DEPENDS options.
> Also, make the custom command DEPENDS on the create_totoc_totoh.sh
> script and it's input (perhaps it reads some configuration file or you
> pass it another file as an argument, etc.).

Both solutions does not solve the problem.

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/toto.h 
${CMAKE_CURRENT_SOURCE_DIR}/toto.c
     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create_totoc_totoh.sh
)
SET_SOURCE_FILES_PROPERTIES(toto.h toto.c PROPERTIES GENERATETED TRUE)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ADD_LIBRARY(titi toto.c)
ADD_LIBRARY(tata tata.c)

The problem is that tata.c include toto.h. cmake does not know it 
because C file dependencies are constructed later by make. The result is 
that CMakeFiles/tata.dir/build.make does not include the rule needed to 
construct toto.h. I try to find a way to add this rule.
A workaround consists in putting toto.h in libtata dependencies but it's 
not a dependency of libtata but a dependency of tata.c.

The error is :
[ 33%] Building C object CMakeFiles/tata.dir/tata.c.o
/home/vivien/tmp/cmake_deps/tata.c:1:18: fatal error: toto.h: No such 
file or directory
compilation terminated.

-- 
Vivien Delmon
PhD at CREATIS, Lyon
http://www.creatis.insa-lyon.fr/rio


More information about the CMake mailing list