2012-05-03 4 views
0

私はプロジェクトにいくつかのelispファイルを持っています。私はバイトコンパイルしてCMakeでインストールしたいと思っています。コンパイル後、.el.elcファイルをディレクトリにインストールすることを目標にしたいと思います。私はこれまで持っていることは、私はcmake(またはccmake)で構成し、makeを実行すると、それは.elファイルをコンパイルしませんByte CMakeでelispファイルをコンパイル

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) 

です。しかしそれは目標を構築し終えたと言いますemacs_byte_compile。だから私は、依存関係がどのように働くかについていくつかの誤解があると仮定します。

答えて

1

作成したカスタムコマンドの出力を消費するトップレベルのターゲットを作成する必要があります。 http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F

add_dependenciesコマンドは、トップレベルのcmakeターゲットを接続する場合にのみ有効で、行が何もしないようにします。このような

何か:

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}) 
+0

パーフェクト!ありがとう。 –