includepath headers directories cmake

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