[CMake] Specifying an alternate location for cmake Modules directory

Paul Smith paul at mad-scientist.net
Thu Nov 14 15:59:10 EST 2013


On Thu, 2013-11-14 at 12:41 +0100, Micha Hergarden wrote:
> For the modules you can use cmake_module_path from within your
> scripts.

Unfortunately this doesn't work.  I should have mentioned that I'd
already tried this.  CMake looks for its installation directory as the
very first thing and errors out if it can't be found, long before it
gets around to parsing CMAKE_MODULE_PATH.

Aha.  I've looked at the code and it appears I can do what I want by
setting the environment variable CMAKE_ROOT (not the cmake variable)
before I start cmake.

However, this doesn't really work for me either: the wrappers that set
this variable are not used when cmake is invoked from the makefile, or
whatever, and Failure Ensues.  Attempts to forcibly override
CMAKE_COMMAND, CMAKE_CPACK_COMMAND, and CMAKE_CTEST_COMMAND worked, but
had their own problems.

I did find a way to do what I want though, by rearranging my directories
somewhat:

  tools/linux/bin/cmake       (a wrapper that invokes the real program)
  tools/macosx/bin/cmake      (wrapper)
  tools/windows/bin/cmake.bat (wrapper)

  tools/common/cmake/linux/cmake       (real program)
  tools/common/cmake/macosx/cmake      (real program)
  tools/common/cmake/windows/cmake.exe (real program)
  tools/common/cmake/Modules/...

Ditto for ctest, cpack, etc.

The reason for the wrappers is that I have lots of tools and I want to
add just one directory to $PATH (tools/linux/bin for example) and get
access to all the tools: I don't want to add a different directory for
each tool.  But I need each tool to be installed completely contained in
its own subdirectory.

Done this way I don't need to use CMAKE_ROOT or do anything differently;
it all just works.  Yay!



More information about the CMake mailing list