[CMake] rule for generated header files (in sub-directories)

Christoph Gysin christoph.gysin at gmail.com
Mon Nov 19 06:15:49 EST 2012


I'm trying to create a rule to generate header files. I have
successfully created a working example based on the CMake
documentation:

cmake_minimum_required(VERSION 2.8)
project(foobar)

add_custom_command(
    OUTPUT Mockfoo.h
    COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/foo.h Mockfoo.h
    DEPENDS foo.h
    COMMENT "generating Mockfoo.h"
    )

add_custom_target(
    Mockfoo.h
    DEPENDS foo.h
    )

set_source_files_properties(
    foo.c
    OBJECT_DEPENDS Mockfoo.h
    )

include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_executable(foo foo.c)

Now I'd like to apply it to my project. I have several sub-directories
with header files, and sub-directories with sources that need to
include mocks generated out of those headers.

Example directory structure:

include1/
  foo1.h
include2/
  foo2.h
src1/
  src1.c
src2/
  src2.c

src1/src1.c:
#include <Mockfoo1.h>

src2/src2.c:
#include <Mockfoo2.h>

I can create the mock targets in inc1/CMakeLists.txt:

add_custom_command(
    OUTPUT Mockfoo1.h
    COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/foo1.h Mockfoo1.h
    DEPENDS foo1.h
    COMMENT "generating Mockfoo1.h"
    )

add_custom_target(
    Mockfoo1.h
    DEPENDS foo1.h
    )

But how to I now specify the dependency in src1/CMakeLists.txt?

set_source_files_properties(
    foo1.c
    OBJECT_DEPENDS lib1/Mockfoo1.h
    )

include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_executable(foo1 foo1.c)

This doesn't work:
make[2]: *** No rule to make target `lib1/Mockfoo1.h', needed by
`src1/CMakeFiles/foo1.dir/foo1.c.o'.  Stop.

I also tried:
OBJECT_DEPENDS Mockfoo1.h
OBJECT_DEPENDS ../Mockfoo1.h
OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/Mockfoo1.h
OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/lib1/Mockfoo1.h

Can someone shed some light on what I am doing wrong?

Thanks,
Chris
-- 
echo mailto: NOSPAM !#$.'<*>'|sed 's. ..'|tr "<*> !#:2" org at fr33z3


More information about the CMake mailing list