[CMake] How to get a variable that is defined in another CMakeLists.txt file

David Cole david.cole at kitware.com
Tue Dec 19 15:55:05 EST 2006


Try GET_DIRECTORY_PROPERTY with VARIABLES -- it should give you a list of
variables for that directory. It will only be accurate after the
ADD_SUBDIRECTORY for the given directory...

The presence or absence of the variable in question should give you the
"defined-ness" of it... As long as you can guarantee directory A gets added
first...

C:\>cmake --help-command GET_DIRECTORY_PROPERTY
cmake version 2.4-patch 5
  GET_DIRECTORY_PROPERTY
       Get a property of the directory.

         GET_DIRECTORY_PROPERTY(VAR [DIRECTORY dir] property)

       Get a property from the Directory.  The value of the property is
       stored in the variable VAR.  If the property is not found, CMake will
       report an error.  The properties include: VARIABLES, CACHE_VARIABLES,
       COMMANDS, MACROS, INCLUDE_DIRECTORIES, LINK_DIRECTORIES, DEFINITIONS,
       INCLUDE_REGULAR_EXPRESSION, LISTFILE_STACK, PARENT_DIRECTORY, and
       DEFINITION varname.  If the DIRECTORY argument is provided then the
       property of the provided directory will be retrieved instead of the
       current directory.  You can only get properties of a directory during
       or after it has been traversed by cmake.

HTH,
David


On 12/19/06, Mike Jackson <mike.jackson at imts.us> wrote:
>
> well, that verified what I am seeing:#-- from Project B CMakeLists.txtfile
> IF ( NOT DEFINED  MHD_INTERFACE_LIB_NAME)
>   MESSAGE ( FATAL_ERROR "MHD_INTERFACE_LIB_NAME is not defined and should
> be")
> ENDIF ( NOT DEFINED  )
>
> where MHD_INTERFACE_LIB_NAME is defined in Project A, and I want to use it
> in Project B.
>
> When I run cmake on the project B directory I get the fatal error.
>
> So.. do I get access to variables in other CMakeLists.txt files that are
> included from top level cmake file?
>
> Thanks
> --
> Mike Jackson   Senior Research Engineer
> Innovative Management & Technology Services
>
>
> On Dec 19, 2006, at 1:37 PM, David Cole wrote:
>
> DEFINED should be used with the variable name itself, not the value of the
> variable:
>
> IF(NOT DEFINED PROJECT_A_LIB_NAME)
>
> Scratch the ${} and see what happens...
>
>
> On 12/19/06, Mike Jackson <mike.jackson at imts.us> wrote:
> >
> > I have couple of projects, lets call them A and B. In project A I
> > "SET" a variable as follows:
> >
> > SET (PROJECT_A_LIB_NAME MyLib)
> >
> > then use that further down A's cmake file in the ADD_LIBRARY() function.
> >
> >
> > Now in Project B I would like to automagically be able to read the
> > PROJECT_A_LIB_NAME variable. I have  added the "ADD_SUBDIRECTORY
> > (PATH_TO_A BIN_DIR) to B's CMakeLists.txt file and then I tried just
> > using the variable like usual ( ${PROJECT_A_LIB_NAME} )  but it is
> > undefined.
> >
> > IF (NOT DEFINED ${PROJECT_A_LIB_NAME} )
> >         MESSAGE (FATAL_ERROR "Ahh.. this is a problem")
> > ENDIF (NOT DEFINED ${PROJECT_A_LIB_NAME} )
> >
> > So.. is there a way to get the variable value from one CMakeLists.txt
> > file to another?
> >
> > Thanks for any help.
> > --
> > Mike Jackson   Senior Research Engineer
> > Innovative Management & Technology Services
> >
> >
> >
> > _______________________________________________
> > CMake mailing list
> > CMake at cmake.org
> > http://www.cmake.org/mailman/listinfo/cmake
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20061219/c648edd9/attachment.html


More information about the CMake mailing list