Andrew Maclean wrote:
Bill, If you think it is generally OK and useful to people, tell me what improvements are needed before it would be eligible for inclusion in the modules directory of CMake.

This will definately be a useful contribution.

I have had a go at writing a FindBoost.cmake file (attached). It tries to find where the boost includes are using "educated guesses" and then tries to determine the path to the library files. The problem with windows is that there is no "default" library path. Is there a better way of doing this for both windows and linux? I have searched the web but most examples are just for linux and only seem to do part of the job.

Does Boost suggest that any environment variables be set for its location? Does it set any registry entries on Windows?

The rationale for my solution is outlined below.
I think my solution is a bit rough around the edges but pointing in the right direction. For example:
If I have a path like /usr/local/include/boost-1_33_1/boost
How can I get the /usr/local part so I can append /lib to it?

Using GET_FILENAME_COMPONENT is fine, but you may not need to strip as much as you are now.

The problem is that I could have a paths like:
 /user/local/include/boost
 /user/include/boost-1_33_1/boost
 /user/local/include/boost
 C:\boost\include\boost
 C:\boost\include\boost\boost-1_33_1\boost
My problem is that I want to set up a BOOST_INCLUDE_PATH (easy, just look for a file like config.hpp).
The hard part is determining the library path it is either:
${BOOST_INCLUDE_PATH}/../../../lib
or
${BOOST_INCLUDE_PATH}/../../lib

What determines during boost installation which of these paths is used? I'm guessing it is whether the version number was included in the install directory..

 You can see from the attached code that I used a series of IF ( EXISTS ...

Is this the best way to do this?
# Usage:
# In your CMakeLists.txt file do something like this:
# ...
# # Boost
# INCLUDE(FindBoost.cmake)

This should be

FIND_PACKAGE(Boost)

The module should also pay attention to the variable Boost_FIND_REQUIRED. If it is set and boost is not found it should exit with a MESSAGE(FATAL_ERROR ...). The variable is set by the FIND_PACKAGE command when it loads the module if it is called like this:

FIND_PACKAGE(Boost REQUIRED)

For finding the include path, look at the PATH_SUFFIXES option of the FIND_PATH command. You should be able to find the headers like this:

FIND_PATH(BOOST_INCLUDE_DIR
          NAMES boost/config.hpp
          PATH_SUFFIXES boost-1_33_1 ...)

Then you will not need to strip the boost/ part of the path, and the sub-path boost-1_33_1 will be searched underneath every other search path specified. Then you can use code like

IF("${BOOST_INCLUDE_DIR}" MATCHES "boost-[0-9]+_[0-9]+")

to test how many levels need to be stripped to find the PREFIX/lib directory.

-Brad
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to