我将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)


我已经尝试使用带make的“ make install”命令来制作make软件包

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

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

最佳答案

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

仅使用“ lib”代替。由于它不是绝对路径,因此将放置在CMAKE_INSTALL_PREFIX下。

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

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

09-09 23:50