Dear list,
I have one problem that I would like to clarify.
Sorry for the long post, but it will be very quick to follow.

Given a directory structure like this (hope it will indent nicely)

CMakeLists.txt (1)
|
|-lib1-CMakeLists.txt (2)
|       |-src
|           |- lib1.hpp
|           |- lib1.cpp
|
|-lib2-CMakeLists.txt (3)
|       |-src
|           |- lib2.hpp
|           |- lib2.cpp
|       |-test
|           |- CMakeLists.txt (4)
|           |- main.cpp


with the following dependencies: 
main.cpp -> lib2 -> lib1

I start with the following (wrong) CMakeFIles (download at 
http://www.keplero.com/upps/SlProblem.tgz). Note that I have explicitly left 
the linking directly out, just to concentrate on include directories.

CMakeLists.txt (1)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT("Example")
ADD_SUBDIRECTORY("${PROJECT_SOURCE_DIR}/lib1")
ADD_SUBDIRECTORY("${PROJECT_SOURCE_DIR}/lib2")

CMakeLists.txt (2)
ADD_LIBRARY(lib1 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib1.cpp)

CMakeLists.txt (3)
ADD_LIBRARY(lib2 ${CMAKE_CURRENT_SOURCE_DIR}/src/lib2.cpp)
ADD_SUBDIRECTORY("${CMAKE_CURRENT_SOURCE_DIR}/test")

CMakeLists.txt (4)
ADD_EXECUTABLE(foo main.cpp)
TARGET_LINK_LIBRARIES(foo lib2)

As lib2.hpp includes lib1.hpp, I get the following error because I haven't 
included the directory where lib1 is.
lib2.hpp:5:10: fatal error: 'lib1.hpp' file not found

Before asking this question, I would have defined a global variable in 
CMakeLists.txt (2)
SET(lib1_include "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE INTERNAL "lib 1 
include")

and from CMakeLists.txt (3) used
INCLUDE_DIRECTORIES (${lib1_include})

Question number 1: is this a good practice?

Question n. 2: I thought I need to
ADD_DEPENDENCIES(lib2 lib1)
so that the order of the ADD_SUBDIRECTORY inclusion from the master cmakelists 
won't matter, but still if I change the order of inclusion, the lib1_include 
isn't set and I get the same error as above.

what is this the only way to deal with include files in this scenario?
Thank you
Alessandro






--

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