'CMake finding package configuration files but not the requested components of SFML

I have been trying to build, and correctly set up Cmake with SFML using find_package + SFMLConfig.cmake.

Cmake correctly finds a configuration file (along with ConfigDependencies, ConfigVersion, ConfigSharedTargets) at default linux install location per the SFML compilation instructions:

/usr/local/lib/cmake/sfml

However at that path there is no shared library files (.so). all of them (audio, graphics, network, system and window) are all the way up at:

/usr/local/lib

So i believe i have correctly built and "installed" SFML with make. I get this error message (for all four components):

CMake Error at /usr/local/lib/cmake/SFML/SFMLConfig.cmake:150 (message):
Found SFML but requested component 'audio' is missing in the config defined in /usr/local/lib/cmake/SFML.
Call Stack (most recent call first):

CMakeLists.txt:17 (find_package)
CMake Error at CMakeLists.txt:17 (find_package): Found package configuration file:
 
/usr/local/lib/cmake/SFML/SFMLConfig.cmake

  but it set SFML_FOUND to FALSE so package "SFML" is considered to be NOT FOUND.

I have tried to set the SFML_DIR variable in my CMakeLists.txt to many different places, both where i store SFML source (where i git cloned), where i built in to SFML-build. and where it is installed. Why are the components missing? Should i copy the .so files into where the SFMLConfig.cmake file is? Should i move the SFMLConfig.cmake and update CMAKE_MODULE_PATH to a new path?

Looking into the SFMLConfig.cmake i see that the last if and elseif Statements in the code below is the one that fails. Meaning TARGET SFML::${component} evaluates false. But I'm not sure what that means.

#SFMLConfig.cmake
    foreach(component ${SFML_FIND_COMPONENTS})
        string(TOUPPER "${component}" UPPER_COMPONENT)
        list(APPEND FIND_SFML_ADDITIONAL_COMPONENTS ${FIND_SFML_${UPPER_COMPONENT}_DEPENDENCIES})
    endforeach()
    list(APPEND SFML_FIND_COMPONENTS ${FIND_SFML_ADDITIONAL_COMPONENTS})
    list(REMOVE_DUPLICATES SFML_FIND_COMPONENTS)
    [...]
    
        foreach (component ${SFML_FIND_COMPONENTS})
            string(TOUPPER "${component}" UPPER_COMPONENT)
            set(SFML_${UPPER_COMPONENT}_FOUND FALSE)
            if (TARGET SFML::${component})
                set(SFML_${UPPER_COMPONENT}_FOUND TRUE)
            elseif(SFML_FIND_REQUIRED_${component})
                set(FIND_SFML_ERROR "Found SFML but requested component '${component}' is missing in the config defined in ${SFML_DIR}.")
                set(SFML_FOUND FALSE)
            endif()
        endforeach()

This is my top CMakeLists.txt file:

set(CMAKE_MODULE_PATH "/usr/local/lib/cmake/SFML") # tell cmake where to find find.cmake and config.cmake files
set(SFML_DIR "/usr/local/lib")
find_package(SFML COMPONENTS graphics window system audio REQUIRED) # Look for SFML


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source