Byte compila archivos elisp con CMake

Tengo algunos archivos elisp en un proyecto que quiero compilar en bytes e instalar con CMake. Después de la compilación, quiero tener un objetivo para instalar el .el y .elc archivos a un directorio. Lo que tengo hasta ahora es

set(ELISP_SOURCES
  a.el.in
  b.el
  )

# Top level target to compile the elisp sources
add_custom_target(emacs_byte_compile ALL)

foreach(el ${ELISP_SOURCES})

  # Configure and copy the files
  get_filename_component(EL_NAME ${el} NAME_WE)
  configure_file(${el} ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.el)

  # Add command to compile the files
  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.elc
    COMMAND ${EMACS} ARGS -batch -f batch-byte-compile ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.el
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.el
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    )

  # Create the dependencies
  add_dependencies(emacs_byte_compile
    ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.el ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.elc
    )

  # Installation target
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.el ${CMAKE_CURRENT_BINARY_DIR}/${EL_NAME}.elc
    RUNTIME DESTINATION ${ELISP_DIR}
    )

endforeach(el)

Cuando configuro con cmake (o ccmake) y luego ejecutar make, no compila el .el archivos Sin embargo, dice que terminó de construir el objetivo. emacs_byte_compile. Así que supongo que tengo algún malentendido sobre cómo funcionan las dependencias.

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

Debe crear un objetivo de nivel superior que consuma la salida del comando personalizado que creó. Puedes encontrar algunas ideas aquí: http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F

El comando add_dependencies solo es útil para conectar objetivos cmake de nivel superior, por lo que esa línea no hace nada.

Algo como esto:

foreach(el ..)
  # collect output files into a list
  # create a custom command to run emacs to create the elc, 
  #input is .el output is .elc
endforeach()
add_custom_target(emacs_byte_compile DEPENDS ${ELC_LIST})

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.