Hello Paul, I don't know about your specific find_package file for FFTW, but we do use modules together with CMake, so I'll add my thoughts:
As Eric already said, the modules command alters your environment. CMake doesn't know about shell modules, but most find_package commands provide some way to tell them about the location of a package by specifying an environment variable (normally something like <PACKAGE>_ROOT or <PACKAGE>_DIR). You'll have to look in the find-package script if this is the case with your FindFFTW.cmake script. If it's not written in the documentation on top of that file, search for "$ENV". If your FindFFTW3.cmake does not examine any environment variable, you should fix it in your project (and file a bug with the original project, if it's not your project). If that's not an option, it's probably best if you just set whatever variable your findFFTW3.cmake script expects as a clue as parameter to cmake (e.g. "cmake .. -DFFTW3_INCLUDE_DIR=$FFTW3_ROOT/include"). So in summary, you should fix your module file to provide a suitable variable pointing to your installation root, and you should also fix poorly written FindXXX.cmake scripts circulating in the wild. Somewhat off-topic, because it's got nothing to do with cmake and your specific problem: it's probably a good idea to prepend PKG_CONFIG_PATH with the pkgconfig directory of fftw. That way, autotool-based projects will be able to find it as well. Cheers, Johannes On Saturday 19 May 2012 14:42:49 Paul Anton Letnes wrote: > Hi all. > > I am currently trying to create a more tidy CMakeLists.txt script for > a simulation code I'm working on. The target platforms are mac and > linux desktops (for development) and HPC [0] servers (all linux or, in > some hypothetical future, unix systems). For the desktop/laptop case, > it's mostly easy enough, as one installs libraries in a standard > location - /opt, /usr/local, or something of that sort. On HPC > servers, it is very common to install software in "modules". I am not > sure how well aquainted the CMake crowd is with the module system [1] > so I'll post a brief explanation. > > HPC servers often have a large amount of users with varying > requirements. Therefore, it is common to require, say, two different > versions of a library, or the same library for two different > compilers. As an example, a machine I'm currently using has several > modules for the FFTW library. Example: > paulanto@rocks:~/Rayleigh2D $ module avail fftw > fftw/2.1.5 fftw/3.2.2(default) > So, there's two different fftw versions available, and I'm currently > using the default one as such: > paulanto@rocks:~/Rayleigh2D $ module load fftw > paulanto@rocks:~/Rayleigh2D $ module list > Currently Loaded Modulefiles: > 1) fftw/3.2.2 > There we go. Now what does it mean to load a module? Well, basically, > the "module" command works by adjusting environment variables: > paulanto@rocks:~/Rayleigh2D $ module show fftw > /share/apps/modulefiles/fftw/3.2.2: > prepend-path CPATH /share/apps/modulessoftware/fftw/fftw-3.2.2/include > prepend-path FPATH /share/apps/modulessoftware/fftw/fftw-3.2.2/include > prepend-path LD_LIBRARY_PATH > /share/apps/modulessoftware/fftw/fftw-3.2.2/lib > prepend-path LIBRARY_PATH > /share/apps/modulessoftware/fftw/fftw-3.2.2/lib We see that the fftw > module sets various paths, and that these will all be different based on > the exact version I'm using on the current machine. Hence, I can't tell > beforehand, in my CMakeLists.txt, where to search for, say, libfftw3.a. > > So why am i ranting on about this? Well, basically > find_package(FFTW3) > does not find the fftw library, and other libraries I'm using (hdf5, > mkl, ...) share the same fate. Previously I've just hand-added all > sorts of include_directories and link_directories but I'm getting fed > up and want to use the more elegant find_package approach, at least > where possible. So, what am I asking? > 1) Is there a standard way for CMake to interact with "modules"? > 2) Is there a standard way to tell FindXXX.cmake (where XXX=fftw, > hdf5, mkl, etc) where to search for libraries? > 3) Can I convince CMake to include link and include directores from > the environment variables, like LIBRARY_PATH, FPATH etc? > 4) How do I handle LIBRARY_PATHs with multiple entries, such as this one? > paulanto@rocks:~/Rayleigh2D $ echo $LIBRARY_PATH > /share/apps/modulessoftware/fftw/fftw-3.2.2/lib:/share/apps/modulessoftware > /hdf5/hdf-5.1.8.5-intel/lib:/share/apps/modulessoftware/openmpi/openmpi-1.4 > .3-intel/lib:/share/apps/modulessoftware/intel/compilers/11.1.059/lib/intel > 64:/share/apps/modulessoftware/intel/compilers/11.1.059/ipp/em64t/lib:/shar > e/apps/modulessoftware/intel/compilers/11.1.059//mkl/lib/em64t:/share/apps/ > modulessoftware/intel/compilers/11.1.059/tbb/intel64/cc4.1.0_libc2.4_kernel > 2.6.16.21/lib > > Perhaps I'm not asking the right questions, but hopefully, some can > tell me what I _should_ be asking. Or even better, the answer. > > Cheers > Paul > > [0] High Performance Computing > [1] http://modules.sourceforge.net/ > -- > > 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