我正在使用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或其他构建系统不是我的选择 - 我知道对YUICompressor的ant支持。
答案 0 :(得分:1)
我自己需要这个,并使用CMake add_custom_command()和add_custom_target()来调用minifier。如果CMAKE_BUILD_TYPE不是“Debug”,它会查找yui-copmressor二进制文件并进行压缩,这样您在开发时就可以轻松一点。
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。 ; - )