Hi Petr,

Thanks for your advices which goes on the line I already explored.

Indeed I have played a bit with similar constructions (either using functions or macros) and yes it works (simply I thought I had missed some features in CMake)

One point which forced me to manually add some tricks to fully exploit my working model:

+------- B project

function(goto project)
  add_subdirectory(${project} ${project}/build)
endfunction()

project(B)
goto(/there/A)
...

+------

+------- A project

project(A)
message("entering A CMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}")

+------


Produces:

...
entering A CMAKE_PROJECT_NAME=B


Which forced me to create a new 'project' function in order to exploit the local project name

The point is thus that the inheritance model of CMake is not what I had expected... In the traditional Object model, classes 'export' or 'hide' their properties independently of the clients, but local features are NOT overriden by clients.

My feelings is that in CMake, the mechanism is different: the meaning of 'inheritance' in CMake is more a client-based relationship!! Once I understood that, I realized that I had to re-create an object relationship by ad-hoc mechanisms (functions, properties, conventions, policies...)

Cheers
Christian






Le 19/04/2012 21:57, Petr Kmoch a écrit :
Depends on who knows the directories to be included. If you're in a
situation when B doesn't know which directories A will add, you can
use global properties for this purpose. Something like this:

#-------------
project(B)
define_property(GLOBAL PROPERTY my_include_files ...)
add_subdirectory(/there/A) #1
get_property(added_by_a GLOBAL PROPERTY my_include_files) #1
include_directories(${added_by_a}) #1

#---------------
project(A)
include_directories(/there/A/include) #2
set_property(GLOBAL PROPERTY my_include_files /there/A/include) #2

#-------------

Lines marked as #1 and #2 could be encapsulated in macros, something
like "add_subdirectory_and_import_includes()" and
"set_and_import_includes()", respectively.

Petr

On Thu, Apr 19, 2012 at 8:58 PM,<[email protected]>  wrote:
You could create a macro for such purpose:

macro(AddAndInclude directory)
    add_subdirectory(${directory})
    include_directories(${directory}/include)
endmacro(AddAndInclude)

Usage:
AddAndInclude(/there/A)

Best Regards
NoRulez

Am 19.04.2012 um 16:42 schrieb Christian Arnault<[email protected]>:

Hi,

My simple work model is as follows:

1) I have two projects A&  B, located in independant locations. Both provide some 
libraries&  executable
2) B makes use of libraries&  headers provided in A


I want to launch the build of A together B thus I do:

#-------------------------
project(B)
add_subdirectory (/there/A)
...
#-------------------------

OK!

Then I'd like to inherit some properties of A (let's say 'include directories' 
!) of course I could simply say:

#--------------------
project(B)
...
add_subdirectory (/there/A)
include_directories (/there/A/includes)
add_library (MyBLib...)
...
#----------------------


OK! this works

Now, suppose I want rather to 'export' the include_directories property while I 
am within the CMakeLists.txt of A, so that, it's enough to add_subdirectory(A). 
such as:

#--------------------------------
project(B)
...
add_subdirectory (/there/A)
add_library (MyBLib...)
#--------------------------------


So as the include_directories property is transparently acquired.
How to do this in CMake ?
(of course, I tried many features of CMake, but perhaps I have missed some 
important point....)

Thanks for any hint

Christian




--
--------------------------------------------
| Christian Arnault                        |
| LAL Bat 200 pièce 03a                    |
| 91405 Orsay CEDEX                        |
| phone   : (33) 1 64 46 84 24             |
| gsm     : (33) 6 77 27 62 30             |
| fax     : (33) 1 69 07 94 04             |
| e-mail  : [email protected] |
--------------------------------------------

--

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

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

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


--
--------------------------------------------
| Christian Arnault                        |
| LAL Bat 200 pièce 03a                    |
| 91405 Orsay CEDEX                        |
| phone   : (33) 1 64 46 84 24             |
| gsm     : (33) 6 77 27 62 30             |
| fax     : (33) 1 69 07 94 04             |
| e-mail  : [email protected] |
--------------------------------------------

--

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