On 1. Sep, 2010, at 13:47 , Paweł Sikora wrote:
> Dnia 01-09-2010 o 13:08:59 Michael Wild <[email protected]> napisał(a):
>
>>
>> On 1. Sep, 2010, at 12:36 , Paweł Sikora wrote:
>>
>>> hi,
>>>
>>> i'm thinking about migration my custom makefiles for very large
>>> project to cmake system and generally have a one problem.
>>>
>>> e.g. i have a library (mylib) and a binary (coreApp) placed
>>> in subdirectiories with one top-level cmakelists.txt:
>>>
>>>
>>> top-level dir:
>>> CMakeLists.txt { cmake_minimum_required (VERSION 2.6) add_subdirectory
>>> (core) add_subdirectory (mylib) }
>>> core
>>> mylib
>>>
>>> ./core subdir:
>>> CMakeLists.txt { add_executable (coreApp main.cpp) target_link_libraries
>>> (coreApp mylib) }
>>> main.cpp
>>>
>>> ./mylib subdir:
>>> CMakeLists.txt { include_directories (h) add_library (mylib SHARED
>>> mylib.cpp) }
>>> h
>>> mylib.cpp
>>>
>>> ./mylib/h:
>>> mylib.hpp
>>>
>>> for mylib build i'm adding the "h" subdir with interface headers
>>> but i need the mylib/h include path also for coreApp build.
>>> is there a simply way to pull include dirs from dependencies?
>>
>> Put include_directories(mylib/h) into the top-level CMakeLists.txt.
>
> naturally but include_directories() in top-level cmakelists.txt is quite
> hard to maintance for live project with few levels of hierarchy and hundreds
> of shared components. implicit include-dirs pulling from dependencies
> to current build target would be great.
> i wondering is it possible to do it with some kind of properties?
It's gonna be more code ;-) And you have to be take care in which order you
call add_subdirectory.
* toplevel/CMakeLists.txt:
add_subdirectory(mylib) # MUST be before core
add_subdirectory(core)
* toplevel/mylib/CMakeLists.txt:
set(MYLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/h) # MUST be absolute paths!
set_property(GLOBAL PROPERTY MYLIB_INCLUDE_DIRS ${MYLIB_INCLUDE_DIRS})
include_directories(${MYLIB_INCLUDE_DIRS})
add_library(mylib SHARED mylib.cpp)
* toplevel/core/CMakeLists.txt:
get_property(HAVE_MYLIB_INCLUDE_DIRS GLOBAL PROPERTY MYLIB_INCLUDE_DIRS DEFINED)
if(NOT HAVE_MYLIB_INCLUDE_DIRS)
message(FATAL_ERROR "MYLIB_INCLUDE_DIRS property not defined, "
"probably due to wrong add_subdirectory ordering.")
endif()
get_property(MYLIB_INCLUDE_DIRS GLOBAL PROPERTY MYLIB_INCLUDE_DIRS)
include_directories(${MYLIB_INCLUDE_DIRS})
add_executable(coreApp main.cpp)
target_link_libraries(coreApp mylib)
If you want to, you can wrap the whole property stuff in some easy to use
convenience functions.
HTH
Michael
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake