我将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安装规则中使用绝对路径。