Hi,

The problem with using SUBDIR is that variables will get scoped to the subdirectory and not automatically available in the parent. There are two ways around this.

The method I use heralds from CMake 1.8. You simply include the CMakeLists.txt files directly, thus putting everything in the same scope:

INCLUDE(subdir1/CMakeLists.txt)
INCLUDE(subdir2/CMakeLists.txt)

ADD_LIBRARY(irgendwas
            hello.cpp
            ${subdir_1_SRCS}
            ${subdir_2_SRCS}
            )

In subdir1/CMakeLists.txt

SET(subdir_1_SRCS
    subdir1/hello1.cpp
    subdir1/hello2.cpp
    )

In subdir2/CMakeLists.txt

SET(subdir_2_SRCS
    subdir2/hello3.cpp
    subdir2/hello4.cpp
    )

The other option is to get the value using GET_DIRECTORY_PROPERTY (note the following code may or may not work, because I don't have a concrete example of it):

GET_DIRECTORY_PROPERTY(subdir_1_SOURCES DIRECTORY subdir1
                       DEFINITION subdir_1_SOURCES)

This looks like an example of using GET_DIRECTORY_PROPERTY:
http://public.kitware.com/pipermail/cmake-commits/2006-October/000303.html

James

Michael Hammer wrote:
Hi!

I would like to add a library and the sources are distributed in different directories, something like the following example:

/ CmakeLists.txt
 hello.cpp
 subdir1 / hello1.cpp
           hello2.cpp
           CMakeLists.txt
 subdir2 / hello3.cpp
           hello4.cpp
           CMakeLists.txt

In the CMakeLists.txt of subdir1 I would write:

set( subdir1_SOURCES
    hello1.cpp
    hello2.cpp )

similar in subdir2

set( subdir2_SOURCES
    hello3.cpp
    hello4.cpp )

in /CMakeLists.txt I would add something like that:

add_subdirectory(subdir1)
add_subdirectory(subdir2)

add_library( irgendwas
            hello.cpp
            subdir_1/${subdir1_SOURCES}
            subdir_2/${subdir2_SOURCES} )

Unfortunately this doesn't work ;) CMake doesn't set the variables subdirx_SOURCES by calling add_subdirectory. The next problem I see is the add_library statement. In subdir1_SOURCES there is a necessary path prefix (subdir1/, subdir2/) missing - I am really not sure if I can add the prefix the way I have done it here (obviously not ;)).

Perhaps someone can help? I am sure there is a "good" or "accurate" way to do this - thanks a lot.

Michael

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to