2008/11/12 Cristóvão Sousa <[EMAIL PROTECTED]>: > Hi, > > I'm having some trouble about creating the correct CMakeLists.txt files to > deal with pure template libraries (header files only). > > A simple sample: > > I have 3 directories with a file in each one: > - Libbase > '- base.hpp > - Libderiv > '- deriv.hpp > - Exec > '- main.cpp > > File main.cpp includes file deriv.hpp; > File deriv.hpp includes file base.hpp: > main.cpp --> deriv.hpp --> base.hpp > > > Right now I have the following cmake files: > > root CMakeLists.txt : > add_subdirectory(Libbase) > add_subdirectory(Libderiv) > add_subdirectory(Exec) > > Libbase/CMakeLists.txt : > #empty > > Libderiv/CMakeLists.txt : > #empty > > Exec/CMakeLists.txt : > set(exec_SRCS main.cpp) > add_executable(exec ${exec_SRCS}) > include_directories(${PROJECT_SOURCE_DIR}/base) > include_directories(${PROJECT_SOURCE_DIR}/deriv) > > > This works fine, but is a little bit annoying having to place > "include_directories(${PROJECT_SOURCE_DIR}/base)" > in the Exec/CMakeLists.txt file. (because in the real project > I use a lot of pure template libraries which include a lot of > other libraries, and often I don't remember them all.) > > 1- Is it possible to create a pure headers library with "add_library"? > I tried passing only the header fine name but it complains about not > knowing how to compile it. > > 2- And how can we make a include_directory be transitive, i.e. > having a library XZY which "include_directory( ABC_DIR )", > automatically do the "include_directory( ABC_DIR )" on any > "target_link_libraries( EXECTARG XYZ)"?
If your header are somehow "public" since they must be included by other part of the porject you may either: 1) add them explicitely to your exe sources files: set(exec_SRCS main.cpp ../ Libbase/base.hpp ../Libderiv/deriv.hpp) 2) Or may be defining "template lib" like (note the PARENT_SCOPE in SET) Libbase/CMakeLists.txt : SET(TLIB_BASE ${CMAKE_CURRENT_SOURCE_DIR}/base.hpp PARENT_SCOPE) Libderiv/CMakeLists.txt : SET(TLIB_DERIV ${CMAKE_CURRENT_SOURCE_DIR}/deriv.hpp PARENT_SCOPE) Exec/CMakeLists.txt : set(exec_SRCS main.cpp ${TLIB_BASE} ${TLIB_DERIV}) add_executable(exec ${exec_SRCS}) 3) export them somewhere in your build tree and include_directory the choosen place: Libbase/CMakeLists.txt : CONFIGURE_FILE(base.hpp build_include) Libderiv/CMakeLists.txt : CONFIGURE_FILE(deriv.hpp build_include) Exec/CMakeLists.txt : include_directories(build_include) set(exec_SRCS main.cpp) add_executable(exec ${exec_SRCS}) I did not test my proposal, but I think they should work. -- Erk _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake