Stefan Buschmann wrote:
Hi all

I'm trying to build a project that consists of several shared libraries and some applications using those libraries.
The directory layout is as follows (simplified):

Project
Project/CMakeLists.txt
Project/SharedLib
Project/SharedLib/CMakeLists.txt
Project/SharedLib/include
Project/SharedLib/src
Project/SharedLib/external
Project/SharedLib/external/include
Project/SharedLib/external/lib
Project/SharedLib/external/lib/libFoo.a
Project/SampleApp
Project/SampleApp/CMakeLists.txt
Project/SampleApp/src

Project/CMakeLists.txt:
 ADD_SUBDIRECTORY(SharedLib)
 ADD_SUBDIRECTORY(SampleApp)

Project/SharedLib/CMakeLists.txt:
 INCLUDE_DIRECTORIES(external/include)
 LINK_DIRECTORIES(external/lib)
 SET(PROJECT_LIBS Foo)
 ...
 ADD_LIBRARY(${PROJECT_TARGET} SHARED ${PROJECT_SOURCES})
 TARGET_LINK_LIBRARIES(${PROJECT_TARGET} ${PROJECT_LIBS})

Project/SampleApp/CMakeLists.txt:
 INCLUDE_DIRECTORIES(../SharedLib/include)
 SET(PROJECT_LIBS SharedLib)
 ...
 ADD_EXECUTABLE(${PROJECT_TARGET} ${PROJECT_SOURCES})
 TARGET_LINK_LIBRARIES(${PROJECT_TARGET} ${PROJECT_LIBS})

Now, when building the project, cmake tries to link libFoo to the sample application instead of linking it to the dynamic library (which is explained in the cmake faq). So it adds -lFoo to the command line, but that library can't be found because the path to the library is unknown (Project/SharedLib/external/lib) as this is only defined in the SharedLib/CMakeLists.txt, but not inside SampleApp/CMakeLists.txt. So, is there a way to solve this without having to add the library path to every dependent project (which would in fact make the library abstraction useless)?
Try putting the full path to Foo. SET(PROJECT_LIBS ${Project_SOURCE_DIR}/external/lib/libFoo.a)

-Bill

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

Reply via email to