9

我正在使用 Cmake 和 Cpack 来创建 debian 包。

我想使用 Cpack 生成一个包,将这些文件安装到特定位置。(例如 /usr/lib /usr/include/aaa)

每个库和头文件都在安装命令中指定,我编写 CPack 选项并将 CPack 包含到根 CMakeLists.txt

(确保根和中间 CMakeList.txt 只有 set 或 add_subdirectory 命令)

项目目录如下所示。

root(CMakeLists.txt CPack) ┬AAA(CMakeLists.txt)─┬─AAA2(CMakeLists.txt install)-src-include
                           │                    └─AAA3(CMakeLists.txt install)-src-include
                           ├BBB(CMakeLists.txt)─┬─BBB2(CMakeLists.txt install)-src-include
...

安装命令似乎喜欢:

ADD_LIBRARY(${AAA2} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/${AAA2_SOURCE_DIR}/AAA.c)
INSTALL(TARGETS ${AAA2} DESTINATION /usr/lib)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${AAA_INCLUDE_DIR}/AAA2.h DESTINATION /usr/include/AAA)

我已经尝试使用 cmake 的“make install”命令制作包

cpack 制作了 debian 包,但它没有任何文件。

我做错什么了?如何使用 cpack 将文件添加到 debian 包?

4

1 回答 1

7

您正在为安装规则 DESTINATION 值使用绝对路径:(即“/usr/lib”)

只使用“lib”。它将放置在 CMAKE_INSTALL_PREFIX 下方,因为它不是绝对路径。

您可以稍后根据需要使用 CMAKE_INSTALL_PREFIX 或一些 CPACK_ 生成器特定的变量(如 CPACK_PACKAGING_PREFIX)来控制“/usr”部分。(希望您甚至不需要这样做,因为根据您创建的 CPack 包的类型,默认行为应该足够了。)

您应该避免在 CMake 安装规则中使用绝对路径,除非文件必须始终安装在所有平台上的该位置。

于 2011-03-09T12:26:12.370 回答