[CMake] Problem with FindXercesC.cmake

Mateusz Loskot mateusz at loskot.net
Thu Sep 27 17:55:03 EDT 2018


On Thu, 27 Sep 2018 at 23:34, Dorier, Matthieu <mdorier at anl.gov> wrote:
>
> When I call find_package(XercesC REQUIRED) and XercesC is not in a standard location, I have to set XercesC_INCLUDE_DIR to its include directory and XercesC_LIBRARY to the location of the library.

Correct. If Find-module can not guess, you help it by setting
FOO_INCLUDE_DIR and FOO_LIBRARY.

> If I set XercesC_LIBRARY to the directory containing the library (not to the fullpath of the library itself), cmake finds XercesC but sets XercesC_LIBRARIES to the folder instead of the library, and the same for the XercesC::XercesC target. It seems I truly have to set XercesC_LIBRARY to the name of the library rather than the path to the folder containing it, which kinds of defies the point of find_package...

Find-modules are guessers and as such they do not guarantee they will
find anything.
Sometimes you need to help it, by setting some standard variables,
https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html

Xxx_INCLUDE_DIR - Where to find headers for using the Xxx library.
Xxx_LIBRARY - The path of the Xxx library

Then, Find-module can also perform extra checks of the explicitly
specified library
for eg.  version, symbols, functions, etc.

> I use to rely on a custom FindXercesC.cmake file that was using XercesC_ROOT to figure all this out.
> Is there any way to do the same here?

There seem to be no Xxx_ROOT_DIR handled by this module
https://cmake.org/cmake/help/latest/module/FindXercesC.html

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


More information about the CMake mailing list