CMake: generar o extraer el encabezado necesario para la biblioteca compartida

Actualmente estoy trabajando en un proyecto más grande que no se mantiene.

Explicación Intenta usar CMake pero no es muy intuitivo. En lugar de include librerías y encabezados compartidos de cada submodule, uno puede establecer un indicador en el CMakeList de nivel superior que activa un add_subdirectory, escaneando el nivel superior CMAKE_BUILD_DIR y se instala en él. Estos CMakeLists utilizan exclusivamente RECUERDO global para encontrar todas las fonts y la mayoría de las operaciones no se basan en objectives, sino que son globales. Por lo tanto, el objective principal se comstack correctamente. Aquí hay un pequeño fragment de la list principal de CMakeList

set(MY_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(MY_SOURCE_BASE_DIR "${MY_BASE_DIR}/myproject") # includes include(build/global.cmake) #include(externalLibs/mz-cmaketools-master/global.cmake) # configuration options option(MOD1 "" ON) option(MOD2 "" ON) option(MOD3 "" OFF) option(MOD4 "" OFF) option(MOD5 "" ON) option(MOD6 "" OFF) option(MOD7 "" ON) message("-- Building myproject unit-tests - ${ENABLE_MYPROJECT_TEST}") set(CMAKE_ECLIPSE_MAKE_ARGUMENTS "-j4") if(MOD1) message(STATUS "Building viral_core + viral_recon") add_subdirectory(${MY_BASE_DIR}/externalLibs/viral/trunk/linux) include_directories(${MY_BASE_DIR}/externalLibs/viral/trunk/source/) else(MOD1) if(MOD3) message(WARNING "Building viral_core + viral_recon") add_subdirectory(${MY_BASE_DIR}/externalLibs/viral/trunk/linux) include_directories(${MY_BASE_DIR}/externalLibs/viral/trunk/source/) endif(MOD3) endif(MOD1) # external libraries include(${MY_BASE_DIR}/externalLibs.cmake) include_directories( ${MY_BASE_DIR} ${MY_SOURCE_BASE_DIR} ${MY_BASE_DIR}/externalLibs/viral/trunk/source/ ) # depending on the supported robots we have different dependencies if( MOD1 ) set(OPT1 TRUE) endif() ... # collect binaries set(LIBRARY_OUTPUT_PATH ${MY_BASE_DIR} CACHE PATH "Library output path") set(EXECUTABLE_OUTPUT_PATH ${MY_BASE_DIR} CACHE PATH "Executable output path") message("-- Setting executable output path: ${EXECUTABLE_OUTPUT_PATH}") message("-- Setting library output path : ${LIBRARY_OUTPUT_PATH}") # collect sources file(GLOB MY "${MY_SOURCE_BASE_DIR}/*.h" "${MY_SOURCE_BASE_DIR}/*.cpp" ) source_group(base FILES ${MY_BASE})# file(GLOB MY_UTIL "${MY_SOURCE_BASE_DIR}/util/*.h" "${MY_SOURCE_BASE_DIR}/util/*.cpp" ) source_group(util FILES ${MY_UTIL}) file(GLOB_RECURSE MY_KINEMATICS "${MY_SOURCE_BASE_DIR}/kinematics/*.h" "${MY_SOURCE_BASE_DIR}/kinematics/*.cpp" ) source_group(kinematics FILES ${MY_KINEMATICS}) file(GLOB MY_COLLISION "${MY_SOURCE_BASE_DIR}/collision/pqp/*.cpp" "${MY_SOURCE_BASE_DIR}/collision/PQP*.cpp" ) source_group(collision FILES ${MY_COLLISION}) ... add_library(MY SHARED ${MY_COLLISION} ${MY_UTIL} ${MY_KINEMATICS} ...} ) .... 

Al final, el proyecto crea varias libs, pero no publica los encabezados necesarios para usarlas. Estas bibliotecas se colocan en el nivel superior del directory de compilation. (sin un paso de installation)

Pregunta

¿Existe la posibilidad de hacer CMake para exportar el encabezado incluido para una lib (destino). Para ser más precisos, estos encabezados solo deberían estar dentro de la carpeta fuente y debajo; los encabezados de / usr / … no deben considerarse. Además, es aceptable si los encabezados se fusionan en un solo encabezado. Pero desde los ~ 1700 encabezados, solo ~ 40 son relevantes, por lo que un simple hallazgo RECURSO no me parece adecuado.

Eché un vistazo a GENERATE_EXPORT_HEADER, pero no creo que sea eso lo que busco. Y no tengo permiso para cambiar el proyecto, por lo que quiero hacer un parche en el repository SVN y NO quiero hacer otra copy del repository, porque hay aproximadamente 10 diferentes en uso.

Agradecería cualquier pista hacia una solución o estrategia

Esta es mi primera pregunta sobre stackoverflow, así que sean misericordiosos 🙂