cpack 组件安装不起作用
cpack component install does not work
我希望 cpack 只包含某些组件。但是他同时使用 运行 和 deb 组件。我看了很多资料。包括这个 cpack component level install 。但我不明白我做错了什么。请告诉我,我做错了什么?
我的 CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(testProj)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(testProj ${SOURCE_FILES})
set(CMAKE_INSTALL_PREFIX .)
install(FILES temp.h DESTINATION someFolder
PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT deb
)
install(FILES Alpha0.400000.txt DESTINATION someFolder
PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT run
)
set(CPACK_TGZ_COMPONENT_INSTALL ON)
set(CPACK_COMPONENT_ALL deb)
set(CPACK_COMPONENTS_ALL deb)
include(CPack)
我获得神器的步骤
cmake .
make
cpack .
CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.sh generated.
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.gz generated.
CPack: Create package using TZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.Z generated.
并且 testProj-0.1.1-Linux.tar.gz 包含
someFolder
-temp.h
-Alpha0.400000.txt
在这种情况下,我认为你应该在 Cmake 创建的 package
目标上调用 make 而不是直接调用 cpack,即调用 make package
而不是 cpack .
。
或者,如果您直接调用 cpack,则可以将要打包的组件作为命令行参数传递。例如cpack -D CPACK_COMPONENTS_ALL="deb"
(多个组件用“;”分隔)
(注意正确的变量是 CPACK_COMPONENTS_ALL
而不是 CPACK_COMPONENT_ALL
)
只需将以下内容添加到您的 CMakeLists.txt
set(CPACK_ARCHIVE_COMPONENT_INSTALL 1)
我 运行 遇到了完全相同的问题,不得不深入研究源代码以找到答案。下面的函数给出了答案:
bool cmCPackArchiveGenerator::SupportsComponentInstallation() const
{
// The Component installation support should only
// be activated if explicitly requested by the user
// (for backward compatibility reason)
return IsOn("CPACK_ARCHIVE_COMPONENT_INSTALL");
}
出于兼容性原因,任何存档包(即 ZIP 和 TGZ)都不使用组件安装。
我希望 cpack 只包含某些组件。但是他同时使用 运行 和 deb 组件。我看了很多资料。包括这个 cpack component level install 。但我不明白我做错了什么。请告诉我,我做错了什么? 我的 CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(testProj)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(testProj ${SOURCE_FILES})
set(CMAKE_INSTALL_PREFIX .)
install(FILES temp.h DESTINATION someFolder
PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT deb
)
install(FILES Alpha0.400000.txt DESTINATION someFolder
PERMISSIONS OWNER_READ OWNER_WRITE WORLD_READ WORLD_EXECUTE COMPONENT run
)
set(CPACK_TGZ_COMPONENT_INSTALL ON)
set(CPACK_COMPONENT_ALL deb)
set(CPACK_COMPONENTS_ALL deb)
include(CPack)
我获得神器的步骤
cmake .
make
cpack .
CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.sh generated.
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.gz generated.
CPack: Create package using TZ
CPack: Install projects
CPack: - Run preinstall target for: testProj
CPack: - Install project: testProj
CPack: Create package
CPack: - package: /home/danyal/testProj/test/testProj-0.1.1-Linux.tar.Z generated.
并且 testProj-0.1.1-Linux.tar.gz 包含
someFolder
-temp.h
-Alpha0.400000.txt
在这种情况下,我认为你应该在 Cmake 创建的 package
目标上调用 make 而不是直接调用 cpack,即调用 make package
而不是 cpack .
。
或者,如果您直接调用 cpack,则可以将要打包的组件作为命令行参数传递。例如cpack -D CPACK_COMPONENTS_ALL="deb"
(多个组件用“;”分隔)
(注意正确的变量是 CPACK_COMPONENTS_ALL
而不是 CPACK_COMPONENT_ALL
)
只需将以下内容添加到您的 CMakeLists.txt
set(CPACK_ARCHIVE_COMPONENT_INSTALL 1)
我 运行 遇到了完全相同的问题,不得不深入研究源代码以找到答案。下面的函数给出了答案:
bool cmCPackArchiveGenerator::SupportsComponentInstallation() const
{
// The Component installation support should only
// be activated if explicitly requested by the user
// (for backward compatibility reason)
return IsOn("CPACK_ARCHIVE_COMPONENT_INSTALL");
}
出于兼容性原因,任何存档包(即 ZIP 和 TGZ)都不使用组件安装。