[CMake] Explicit <NAME>_LIBRARIES and <NAME>_INCLUDE_DIRS

Mateusz Loskot mateusz at loskot.net
Fri Mar 22 18:37:36 EDT 2013


On 22 March 2013 21:25, Andreas Stahl <andreas.stahl at tu-dresden.de> wrote:
> Am 22.03.2013 um 16:59 schrieb Mateusz Loskot <mateusz at loskot.net>:
>>
>> I'm trying to build software which uses libE57 library which has
>> Xerces as dependency.
>> I build Xerces too as part of my project and I deploy it in custom locations
>> and Xerces library has custom name.
>>
>> libE57 provides FindXerces.cmake [1] and I've been trying to figure
>> out how I can
>> make this module find Xerces I provide, I tried to explicitly the two variables:
>> Xerces_INCLUDE_DIR
>> Xerces_LIBRARY
>> on invocation of cmake, but obviously this FindXerces.cmake is still nagging me
>> about XERCES_ROOT
>>
>> This is first time when I have to deal with CMake-based software and custom
>> names and locations of libraries, so I'm not sure either I'm missing some
>> important tricks here or this FindXerces.cmake is just poorly written module
>> and it does not check if user passes <NAME>_INCLUDE or <NAME>_LIBRARY directly.
>>
>> I know I can also use CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH,
>> but how to deal with custom library names, when this module expects
>> two options only [2].
>>
>> Could anyone advise about workaround?
>>
>> Is this an issue in the FindXerces.cmake and would you say it's worth
>> to submit bug report to libE57?
>>
>> [1] http://sourceforge.net/p/e57-3d-imgfmt/code/331/tree/trunk/cmake/Modules/FindXerces.cmake
>> [2] http://sourceforge.net/p/e57-3d-imgfmt/code/331/tree/trunk/cmake/Modules/FindXerces.cmake#l44
>
>
> Try setting the environment variable set($ENV{XERCES_ROOT} /path/to/xerces) to the directory where you installed the library,
> before you call find_package. That should be enough.

I have tried that and it does not work.
But, even without trying the XERCES_ROOT, I already know it won't
work, because as I explained
I use custom structure where I keep Xerces and I use custom name for
Xerces .lib.

What I need is this:

-DXerces_LIBRARY=C:\build\lib\msvc10\debug\xerces_MDd.lib
-DXerces_INCLUDE_DIR=C:\src\xerces


But, as you can see in the FindXerces.cmake [1], it assumes include subdirectory
${XERCES_ROOT}/include
and it looks up for hard-wired names: xerces-c_static_3D.lib libxerces-c.a

But, trying to make use of the find_package_handle_standard_args here by
setting valid Xerces_LIBRARY and  Xerces_INCLUDE_DIR to make CMake to consider
Xerces as found.

I'm not sure why it does not work.
If it does not work because FindXerces.cmake is faulty, I'd like to fix it
and submit patch to libE57.


Best regards,
--
Mateusz Loskot, http://mateusz.loskot.net


More information about the CMake mailing list