On Thu, May 28, 2009 at 10:03:11PM +0300, Dmytro Ovdiienko wrote:
> That was just a sample. CMake  can build it correctly, if you specify full
> path to the include directlry.
> 
> If you root CMakeLists.txt declares ROOT_PRJ you can write following in the
> A project.
> 
> INCLUDE_DIRECTORIES(
>   ${ROOT_PRJ_SOURCE_DIR}/B
>  )
> 
> And following in the B project
> 
> INCLUDE_DIRECTORIES(
>   ${ROOT_PRJ_SOURCE_DIR}/A
>  )

This is how I would do it. Either this, or just define A_SOURCE_DIR and
B_SOURCE_DIR in your top-level CMakeLists.

> A and B are static libraries. The order static libraries building has no
> mater.

Not true. Typically I interpret "dependencies" in this context to
describe a situation where source files in B rely on symbols in libA.
Therefore, libA must be available so that we can compile (and link)
libB. In this situation, libA obviously must be built before libB.

> It is defined if B folder is processed before A folder. But then
> A_SOURCE_DIR is not defined in the B project (circular dependency)

Ok, now I see what you mean. As noted above, I would move the dependency
up to the top level to prevent this loop.

I still don't understand how you would expect CMake to handle this
situation.

> But... why does TARGET_LINK_LIBRARIES work correctly? You can pass not
> loaded-yet project name to TARGET_LINK_LIBRARIES.

I think my favorite pop superstar-nee-software developer Mike Jackson
already addressed this point (just because libs and targets happen to
have the same name doesn't mean that they are the same concept).

tyler
_______________________________________________
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

Reply via email to