Pregunta

Hace poco comenzó la creación de mi propia biblioteca y proyectos utilizando un sistema de cruz plataforma de construcción (genera archivos de fabrica, soluciones de Visual Studio / proyectos, etc en la demanda) y me he encontrado con un problema que probablemente ha sido resuelto ya.

El problema que se han topado es la siguiente: Cuando una aplicación tiene una dependencia que también tiene dependencias a continuación, la aplicación que se vincula debe vincular la dependencia y también todos sus sub-dependencias. Este producto de una manera recursiva por ejemplo.

(Para argumentos aras permite suponer que se trata exclusivamente de las bibliotecas estáticas.)

  • TopLevelApp.exe
    • dependency_A
      • dependency_A-1
      • dependency_A-2
    • dependency_B
      • dependency_B-1
      • dependency_B-2

Así que en este ejemplo TopLevelApp tendrá que vincular dependency_A, dependency_A-1, 2-dependency_A etc y lo mismo para B. Creo que la responsabilidad de recordar todos estos manualmente en la aplicación de destino es bastante sub óptima. También está la cuestión de garantizar la misma versión de la dependencia se utiliza en todos los objetivos (suponiendo que algunos objetivos dependen de las mismas cosas, por ejemplo, impulso).

Ahora que une todas las bibliotecas que se requiere y no hay manera de conseguir alrededor de él. Lo que busco es un sistema de construcción que logra esto para usted. Así que todo lo que tiene que hacer es especificar que depende de algo y las dependencias apropiadas de esa biblioteca se necesiten en forma automática.

El sistema de construcción que he estado mirando es Premake premake4 que no manejar esto (la medida de lo puedo determinar). ¿Alguien sabe de un sistema de construcción que hace manejar esto? y si no es por qué no?

¿Fue útil?

Solución

La forma típica que se maneja esto es por medio de la biblioteca en la que usted depende que diga lo que, a su vez, requiere y qué versiones se ha unido en contra. Una forma de hacer esto es a través de pkg-config . Por ejemplo, si se invoca pkg-config name_of_package --cflags, lo que imprimirá las banderas necesarias que deberían incluir las banderas necesarias para agregar encabezados de dependencias indirectas. Del mismo modo, pkg-config name_of_package --ldflags imprimiría las banderas de engarce necesarias que incluyen esa biblioteca particular, así como sus dependencias. En cuanto a sistema de construcción, mi recomendación sería utilizar CMake . En CMake, dependencias se encuentran a través de una invocación de FIND_PACKAGE (name_of_package), que a su vez define la name_of_package_FOUND variable como 1 si se encontró el paquete, y también - si se encontró - define name_of_package_LIBRARIES y name_of_package_INCLUDE_DIRS a las bibliotecas y caminos de cabecera para ese paquete, así como a las bibliotecas y cabeceras de sus dependencias. Dicho esto, el mecanismo funciona FIND_PACKAGE a través de módulos enchufables escritos por terceros, y así mientras el sistema se supone que debe establecer los _LIBRARIES y variables _INCLUDE_DIRS tal que las dependencias de las dependencias se incluyen de forma recursiva, no todos los módulos de hacer esto correctamente última vez que revisé.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top