[CMake] add_custom and files generated into subdirectories

William R. Otte wotte at dre.vanderbilt.edu
Wed Apr 11 12:18:02 EDT 2012


Hi - 

I have a question about resolving dependencies when add_custom is used to generate files into subdirectories.  Consider the following example (substantially simplified from my use case, but it captures the essence of what I am trying to do:

In the root of the project, I have the following:

/Foo.cmake:
add_custom_command (OUTPUT Bar/Foo.cpp
                    COMMAND touch Bar/Foo.cpp
                   )

#end /Foo.cmake

/CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)

include (Foo.cmake)
add_subdirectory (Bar)

#end /CMakeLists.txt

In a subdirectory Bar, I have the following:

/Bar/Bar.cmake:
add_library ( Bar SHARED
              Foo.cpp )
#end /Bar/Bar.cmake

/Bar/CMakeLists.txt:
include (Bar.cmake)
#end /Bar/CMakeLists.txt


When I attempt to compile this into makefiles, I get the following diagnostic from cmake:

CMake Error at Bar/Bar.cmake:1 (add_library):
  Cannot find source file:

    Foo.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx
Call Stack (most recent call first):
  Bar/CMakeLists.txt:1 (include)


I understand why that diagnostic is appearing (cmake knows about a Bar/Foo.cpp, but not about a Foo.cpp).  Is there some way to get Cmake to automagically realize that within the context of Bar.cmake, Foo.cpp and Bar/Foo.cpp are the same thing?

thanks,
/-Will



More information about the CMake mailing list