1

私はCMakeを使用してC++Webアプリケーションをビルドおよびパックしています。アプリケーションには、追加のCSSファイルとJavascriptファイルが必要です。さまざまなマシンでのインストールプロセスを容易にするために、ZIPファイルを準備し、次のようなルールを使用して必要なファイルを追加します。

# add javascript/CSS
install(DIRECTORY "${PROJECT_SOURCE_DIR}/css" DESTINATION "${THE_HTDOCS_DIR}"
    DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

# add images/icons
install(DIRECTORY "${PROJECT_SOURCE_DIR}/ico" DESTINATION "${THE_HTDOCS_DIR}"
    DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

コンプレッサーまたはミニファイツールをCMake/CPackリリースプロセスに統合するための最良の方法は何ですか?たとえば、YUICompressorを呼び出してCSS/JSファイルを圧縮すると便利です。Web検索中にこれを解決するためのヒントは見つかりませんでした。したがって、ヒントは大歓迎です。

antまたは他のビルドシステムを使用することは私にとってオプションではありません-私はYUICompressorのantサポートを知っています。

4

1 に答える 1

1

私はこれを自分で必要とし、CMake add_custom_command()とadd_custom_target()を使用してミニファイアを呼び出しました。yui-copmressorバイナリを検索し、CMAKE_BUILD_TYPEが「デバッグ」でない場合は圧縮するため、開発中に少し簡単になります。

set(js_in_files
    foo.js
    bar.js
    baz.js
)

find_program(YUI_EXECUTABLE yui-compressor)
if(YUI_EXECUTABLE AND (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug"))
    message(STATUS "JS files will be minified before install.")
    foreach(jsfile ${js_in_files})
        set(jsmin "${CMAKE_CURRENT_BINARY_DIR}/${jsfile}.min")
        add_custom_command(OUTPUT ${jsmin}
            COMMAND ${YUI_EXECUTABLE}
            ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${jsfile}" -o "${jsmin}"
        )
        install(FILES ${jsmin}
            DESTINATION "${WEB_INSTALL_PATH}/cgi-bin/scripts/"
            RENAME ${jsfile}
        )
        set(js_out_files ${js_out_files} ${jsmin})
    endforeach(jsfile)
else()
    message(STATUS "JS files will be installed unmodified.")
    foreach(jsfile ${js_in_files})
        install(FILES ${jsfile}
            DESTINATION "${WEB_INSTALL_PATH}/cgi-bin/scripts/"
        )
        set(js_out_files ${js_out_files} ${jsfile})
    endforeach(jsfile)
endif()

add_custom_target(installjs ALL DEPENDS ${js_out_files})

インストールコマンドの宛先を必ず調整してください。;-)

于 2012-11-22T18:57:54.327 に答える