[CMake] Problem with design and ADD_SUBDIRECTORY

Andreas Pakulat apaku at gmx.de
Tue Jul 14 11:35:26 EDT 2009


On 14.07.09 12:08:43, Martin Santa María wrote:
> 
> Hello everyone,
> 
> I have a design problem. I have a new project consisting on different packages. Each package should be built as a library but it could depend on libraries generated by other packages. Also there is an executable built from some of these libraries:
> 
> root/
>   CMakeLists.txt   -> generates executable with some package libraries
>   package1/
>     CMakeLists.txt -> generates package1.lib
>   package2/
>     CMakeLists.txt -> generates package2.lib that depends on package1 library and its header files. so it must include root/package1/
> 
> 
> My problem begins with INCLUDE_DIRECTORIES and LINK_DIRECTORIES. 

Don't use link_directories, instead use target_link_libraries and name
the needed targets in there. So for package2/CMakeLists.txt you'd have:

add_library( package2 SHARED <sources> )
target_link_libraries(package2 package1)

For include dirs of package2/CMakeLists.txt you can just do:

include_directories( "${CMAKE_SOURCE_DIRECTORY}/package1" )

> archive this, I think I need to use ADD_SUBDIRECTORY so each sub

Right.

> The problem is that the root CMakeLists.txt should known the list of
> generated libraries and source files so it could make the global
> executable. 

Again, you can simply use the target names:

target_link_libraries(rootexec package1 package2 package4 package7)

If the number of libs depends on certain options you can simply build up
a list of actually built targets:

set( LIBS ${package2} )
if(OPTION_FOO)
  set( LIBS ${LIBS} package1)
else(OPTION FOO)
  set( LIBS ${LIBS} package3)
endif(OPTION_FOO)

Andreas

-- 
You will triumph over your enemy.


More information about the CMake mailing list