如何使用CMAKE在deb中添加更改日志?

时间:2017-09-29 14:01:06

标签: cmake deb cpack

我正在用CMAKE和CPACK构建一个debian包。除了我无法找到如何在deb包中添加changelog文件之外,构建的一切都很顺利。有什么办法吗?

1 个答案:

答案 0 :(得分:0)

至少从CMake 3起,Debian CPack生成器提供了变量CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA,该变量是要添加到软件包控制部分的任意文件的列表。

您可以编写/生成您的变更日志文件,并将其添加到此变量中:

set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/debian/changelog")

有关更多信息,请参见CMake docs

=====编辑=====

Lintian(非常正确)doesn't like上述解决方案。变更日志应被压缩并安装在/usr/share/doc/package-name/changelog.gz中。以下代码可在Linux上运行:

include(GNUInstallDirs)

add_custom_command(
    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz
    COMMAND gzip -cn9 "${CMAKE_CURRENT_SOURCE_DIR}/changelog" "${CMAKE_CURRENT_SOURCE_DIR}/changelog.gz"
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/changelog"
    COMMENT "Compressing changelog"
)

add_custom_target(changelog ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz")

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz"
    DESTINATION "${CMAKE_INSTALL_DOCDIR}"
)

add_custom_command添加了一个挂钩,以在其依赖项(changelog)更改时重新生成changelog.gz。 add_custom_target添加了一个在生成时生成changelog.gz的目标。 install将压缩的变更日志安装到正确的位置。

代码应放在与变更日志相同目录的CMakeLists.txt文件中。不幸的是,CMake似乎还没有跨平台的方式来压缩单个文件。