2009-09-22 9 views
26

Tengo dos proyectos, los cuales usan CMake. Ahora quiero incluir uno de los proyectos como una biblioteca dentro de la otra, al mismo tiempo que mantengo la capacidad de compilarlos como proyectos independientes.¿Incrustar un proyecto de cmake dentro de otro?

Lo que he hecho hasta ahora es: Usar el sistema de control de versiones para clonar una copia del proyecto hijo en un subdirectorio del proyecto principal. He utilizado el "add_subdirectory" para incluir el CMakeLists.txt del proyecto secundario en el proyecto principal. Y he solucionado las colisiones de nombres entre los objetivos al renombrar algunos de los objetivos en el proyecto secundario.

Sin embargo, un problema que me estoy encontrando es que las diversas pruebas de configuración en el proyecto secundario no parecen estar ejecutándose. Por ejemplo, el proyecto secundario usa el módulo FindThreads para determinar qué primitivas de sincronización están disponibles. El proyecto principal no tiene conocimiento de problemas de subprocesamiento y, por lo tanto, no tiene ninguna prueba relacionada con esto. De forma similar, el proyecto secundario tiene varias pruebas para los encabezados y tales que no son necesarios para el proyecto principal. Parece que ninguna de estas pruebas se está ejecutando, y los símbolos definidos por estas pruebas no se están agregando al archivo CMakeCache.txt.

Realmente no quiero tener que izar todas las pruebas del proyecto hijo (que principalmente se ocupan de problemas específicos de la plataforma que no son relevantes para el padre) en el CMakeLists.txt del proyecto padre.

Respuesta

17

CMake 2.8 agregó un nuevo módulo External Project, que le permite crear un destino personalizado para dirigir la construcción de otro proyecto CMake. La documentación sobre esto es débil, pero parece que podría hacer lo que quieras.

Creo que la idea sería llamar ExternalProject_Add desde su proyecto principal, apuntarlo al directorio de origen del proyecto hijo (incluso puede hacer que revise el proyecto secundario de SVN o CVS por usted, ¡bien!).

+1

Gracias, he estado trabajando con proyectos externos recientemente y hacen lo que quiero. Como utilizo los subproyectos de git, tengo que decirle a ExternalProject_Add que no descargue ni instale el proyecto externo; esto se puede hacer configurando los comandos de descarga e instalación en "" (cadena vacía). – Talin

Cuestiones relacionadas