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 文件会很好。在我的网络搜索过程中,我没有找到任何解决此问题的提示。所以欢迎任何提示。

使用 ant 或其他构建系统对我来说不是一个选项 - 我知道 ant 支持 YUICompressor。

4

1 回答 1

1

我自己需要这个,并使用 CMake add_custom_command() 和 add_custom_target() 来调用 minifier。它会查找 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})

确保调整安装命令的 DESTINATION。;-)

于 2012-11-22T18:57:54.327 回答