[CMake] Encapsulating macros

Theodore Papadopoulo Theodore.Papadopoulo at sophia.inria.fr
Wed Oct 21 08:11:12 EDT 2009


Alexander Neundorf wrote:
> There was something...
> If you override an already existing macro/command, the previous version is 
> still available, but with an underscore prefixed, i.e. _find_library().
> I'm not sure I remember correctly, but it was somethign close to this.
>   
You remembered correctly... It works. Thank's...

The only funny thing (another cmake mystery) is that it did not work as 
a macro. This small program:

PROJECT(OpenMEEG)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)

MACRO(FIND_LIBRARY VAR)
    MESSAGE("${VAR} ${ARGN}")
    _FIND_LIBRARY(${VAR} ${ARGN})
ENDMACRO()

FIND_PACKAGE(PythonLibs)

fails with the message:

CMake Warning (dev) at CMakeLists.txt:6 (MESSAGE):
   Syntax error in cmake code at

     /tmp/test/CMakeLists.txt:6

   when parsing string

     PYTHON_LIBRARY
 NAMES;python26;python2.6;PATHS;[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.6\InstallPath]/libs;PATH_SUFFIXES;python2.6/config;NO_SYSTEM_ENVIRONMENT_PATH

   Invalid escape sequence \S

   Policy CMP0010 is not set: Bad variable reference syntax is an 
error.  Run
   "cmake --help-policy CMP0010" for policy details.  Use the cmake_policy
   command to set the policy and suppress this warning.
 Call Stack (most recent call first):
   /usr/share/cmake/Modules/FindPythonLibs.cmake:26 (FIND_LIBRARY)
   CMakeLists.txt:10 (FIND_PACKAGE)
 This warning is for project developers.  Use -Wno-dev to suppress it.
[.... more messages of the same vein .....]

while this one (with function instead of macro) works....

PROJECT(OpenMEEG)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)

FUNCTION(FIND_LIBRARY VAR)
    MESSAGE("${VAR} ${ARGN}")
    _FIND_LIBRARY(${VAR} ${ARGN})
ENDFUNCTION()

FIND_PACKAGE(PythonLibs)


More information about the CMake mailing list