[CMake] Relative include() calls
Michael Jackson
mike.jackson at bluequartz.net
Thu May 28 13:05:37 EDT 2009
There is a pattern that I use that is similar to what you are wanting
so I'll just throw it out there for your consideration:
project (Foo)
#CMake will now Define Foo_SOURCE_DIR which
# is the same as the current directory. It is
# also put into the cache.
include (${Foo_SOURCE_DIR}/cmake/common.cmake)
# CMake also defines PROJECT_NAME which takes on the last
# invocation of the "project()" command. So you could rewrite
# the above as:
include (${${PROJECT_NAME}_SOURCE_DIR}/cmake/common.cmake)
Then inside of common.cmake you can use the following:
include (${Foo_SOURCE_DIR}/cmake/BoostUtils.cmake)
which will generally work but will _still_ fail if you decide
to try and reuse the code in other projects. So what I decided
was to use "Convention Over Configuration" in all my projects.
I _always_ have a "Resources" directory in my project. Inside of that
directory is _always_ a CMake directory. So in the top level
CMakeLists.txt
file of my project I set the following:
set (PROJECT_RESOURCES_DIR ${${PROJECT_NAME}_SOURCE_DIR}/Resources)
set (PROJECT_CMAKE_DIR ${${PROJECT_NAME}_SOURCE_DIR}/Resources/CMake)
That way if I have cmake code that needs to reference those
directories I always have
cmake variables that can point to the proper directory and I _always_
refer to
files in those directories by their full name:
include (${PROJECT_RESOURCES_DIR}/MyReallyCoolCMakeMacros.cmake)
Just some thoughts.
_________________________________________________________
Mike Jackson mike.jackson at bluequartz.net
BlueQuartz Software www.bluequartz.net
Principal Software Engineer Dayton, Ohio
On May 28, 2009, at 12:17 PM, Robert Dailey wrote:
> On Thu, May 28, 2009 at 11:06 AM, Tyler Roscoe <tyler at cryptio.net>
> wrote:
> On Thu, May 28, 2009 at 10:42:03AM -0500, Robert Dailey wrote:
> > The most annoying thing about this solution, though, is that every
> single
> > CMakeLists.txt that includes this module needs to make sure it has
> > CMAKE_MODULE_PATH setup properly. It's just a bit redundant and
> > tedious.
>
> You're kind of a hater, aren't you Robert?
>
> I never said I hated anything, I just said it was just a little bit
> obnoxious (redundant/tedious).
>
> Can you just set CMAKE_MODULE_PATH in your ../cmake/common.cmake? If
> all
> your Lists include that then you only need to set it once.
>
> Yep I thought about this too, but it is still not the perfect
> solution I had in mind :) Not having to set it at all is the ideal
> path, but we can't all get our way :)
>
> Thanks for your help.
> _______________________________________________
> 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
More information about the CMake
mailing list