cmake

Sugerencia Encuentra archivos<nombre>.cmake con un directorio personalizado



(1)

En CMake, ¿hay alguna forma de crear scripts de búsqueda integrados para priorizar un directorio personalizado que especificamos? Porque especialmente en Windows, los scripts de búsqueda de módulos generalmente no pueden detectar el módulo en, por ejemplo, los directorios de Visual Studio. Por lo tanto, generalmente tengo que configurar manualmente las rutas para las bibliotecas externas, lo cual es bastante agotador. En cambio, quiero que esos scripts se vean en un directorio personalizado, digamos primero la carpeta ''dependencias'' en el proyecto principal para que pueda colocar directamente esos externos en esa carpeta, lo cual es mucho más fácil que ponerlos en la carpeta VC o configurar manualmente el caminos.


La CMAKE_PREFIX_PATH variable CMAKE_PREFIX_PATH sirve exactamente para estos propósitos: insinuar la función find_* sobre la ubicación del elemento buscado.

Si bien la descripción de esta variable no tiene en cuenta la función find_package , la variable afecta indirectamente a ella: la mayoría de los scripts Find<name>.cmake utilizan las funciones find_library y find_path . Tenga en cuenta que todas las funciones find_* tienen un algoritmo preciso para los elementos de búsqueda, y las rutas construidas con CMAKE_PREFIX_PATH se verifican antes que las del sistema.

Además, CMAKE_PREFIX_PATH afecta a otros procedimientos de búsqueda. Por ejemplo, si el paquete 3D party proporciona <name>Config.cmake script en lugar de Find<name>.cmake one, este script también se busca con el uso de esta variable. pkg_check_modules también usa CMAKE_PREFIX_PATH para buscar archivos .pc , describe el paquete.

CMAKE_PREFIX_PATH variable CMAKE_PREFIX_PATH se puede establecer como entorno uno (de forma dependiente de la plataforma y específica del uso), como parámetro para cmake llamada:

cmake -DCMAKE_PREFIX_PATH=<additional-path> <other-parameters>

o dentro del archivo CMakeLists.txt . En el último caso, es mejor agregar directorios de búsqueda, por lo que el usuario de su paquete también puede establecer la variable para los paquetes de búsqueda no enviados con su proyecto:

list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dependencies")

Tenga en cuenta que la variable CMAKE_PREFIX_PATH no afecta la búsqueda del script FindXXX.cmake . Para especificar el directorio donde se encuentra el script, use la variable CMAKE_MODULE_PATH .