tutorial make descarga cmake

descarga - ¿Cómo establecer include_directories desde un archivo CMakeLists.txt?



cmake vs make (1)

include_directories () rellena una propiedad de directorio llamada INCLUDE_DIRECTORIES:

http://www.cmake.org/cmake/help/v2.8.12/cmake.html#prop_dir:INCLUDE_DIRECTORIES

Tenga en cuenta que CMake 2.8.11 aprendió el comando target_include_directories, que rellena la propiedad de destino INCLUDE_DIRECTORIES.

http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories

Tenga en cuenta también que puede codificar el hecho de que ''para compilar contra los encabezados del destino lib, se necesita el directorio de inclusión lib / inc'' en el propio lib de destino utilizando target_include_directories con la palabra clave PUBLIC.

add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) # Why do you list the headers? target_include_directories(lib PUBLIC "${ROOT_SOURCE_DIR}/lib/inc")

Tenga en cuenta también que estoy asumiendo que no instala la biblioteca lib para que otros la usen. En ese caso, necesitaría especificar diferentes directorios de encabezado para la ubicación de compilación y para la ubicación instalada.

target_include_directories(lib PUBLIC # Headers used from source/build location: "$<BUILD_INTERFACE:${ROOT_SOURCE_DIR}/lib/inc>" # Headers used from installed location: "$<INSTALL_INTERFACE:include>" )

De todos modos, eso solo es importante si está instalando lib para que otros lo usen.

Después de los directorios target_include_directories (lib ...) de arriba, no necesita la otra llamada include_directories (). El objetivo lib ''le dice'' a proj1 los directorios de inclusión que necesita usar.

Ver también target_compile_defintions () y target_compile_options ().

Parece que tengo problemas para configurar la ruta de inclusión ("-I") con el comando include_directories () en CMake. Mi directorio de proyectos es el siguiente:

Root | - CMakeLists.txt | - libs | - | - CMakeLists.txt | - | - inc | - | - | - // lib specific includes | - | - src | - | - | - // lib specific sources | - proj1 | - | - CMakeLists.txt | - | - inc | - | - | - // proj1 specific includes | - | - src | - | - | - // proj1 specific sources

El archivo raíz CMakeLists se ve así:

project(ROOT) add_subdirectory(libs) add_subdirectory(proj1)

El archivo CMakeLists.txt en libs:

project(lib) add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) // for conciseness, omitted set()

Y, por último, el archivo CMakeLists.txt en proj1

project(proj1) include_directories("${ROOT_SOURCE_DIR}/lib/inc") # <- problem line? add_executable(proj1 ${proj1_srcs}) target_link_libraries(proj1 lib)

El objetivo es crear la biblioteca a partir de los archivos de origen y de encabezado en libs, luego vincular con el archivo ejecutable generado en proj1. Proj1 tiene algunos archivos que incluyen #include stuff en libs, así que necesito agregar los directorios que se usarán con "-I". Según la documentación, eso es lo que se supone que debe hacer un include_directories. Sin embargo, a pesar de establecer explícitamente eso y seguirlo con un mensaje de depuración ($ {INCLUDE_DIRECTORIES}), la variable INCLUDE_DIRECTORIES es una cadena vacía y no se especifica ningún directorio para la ruta include, por lo que mi compilación de proj1 falla.

También intenté eliminar las cotizaciones alrededor de $ {ROOT_SOURCE_DIR} / inc para ver si eso ayudó, pero no tuve suerte.