headers - Listado include_directories en CMake
include directories cmake (2)
Tengo una compilación en la que estoy buscando un montón de dependencias, es decir, tengo muchos ejemplos de
FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
include_directories(${SOMEPACKAGE_INCLUDE_DIR})
link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
Ahora, quiero agregar un comando personalizado para compilar un archivo de encabezado precompilado, pero para hacer esto necesito saber todas las rutas agregadas por mis llamadas include_directories
. ¿Cómo puedo obtener una lista de estos directorios (preferiblemente con el formato de -I / ruta / a / directorio adecuado) para poder agregarlos a mi comando personalizado?
Nuestra solución para escribir incluye directorios añadidos por conan a un archivo.
function(output_conan_include_dirs)
set(include_dir_str "")
foreach(DIR ${CONAN_INCLUDE_DIRS})
set(include_dir_str "${include_dir_str}${DIR}/n")
endforeach()
set(pth "${CMAKE_BINARY_DIR}/conan-includes.txt")
file(WRITE "${pth}" "${include_dir_str}")
message(STATUS "Conan include directories written to: ${pth}")
endfunction()
output_conan_include_dirs()
Puede usar el comando get_property para recuperar el valor de la propiedad de directorio INCLUDE_DIRECTORIES
Algo como esto:
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir=''${dir}''")
endforeach()
El valor de esta propiedad de directorio solo rastrea los comandos de include_directories que se han producido anteriormente en el mismo archivo CMakeLists, o que se han heredado de ocurrencias previas en un archivo de CMakeLists principal. Si sus comandos find_package y include_directories están dispersos en muchos subdirectorios, esto se convierte en un problema desafiante.
Si llega a ese punto, puede considerar anular el comando include_directories con su propia función o macro y hacer un seguimiento de los valores que se le pasaron. O simplemente acumúlalas en una propiedad global o en una variable de caché interna junto con cada llamada a include_directories.
Vea la documentación aquí:
http://cmake.org/cmake/help/v2.8.8/cmake.html#command:get_property
http://cmake.org/cmake/help/v2.8.8/cmake.html#prop_dir:INCLUDE_DIRECTORIES