CPack尝试建立所有目标 [英] CPack tries to build all targets

查看:127
本文介绍了CPack尝试建立所有目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 CMake 项目,该项目由一个根 CMakeLists 和多个子<< c $ c> CMakeLists组成(每个项目一个)。

I have a CMake project composed of one root CMakeLists and multiple sub-CMakeLists (one for each project).

我正在尝试使用 CPack 生成这些项目之一(APP_client)的.deb文件。
但是,当我尝试运行 CPack 时,它首先运行预安装并尝试构建所有目标。
我只想构建所需的目标及其依赖项。

I am trying to use CPack to generate a .deb file for one of these projects (APP_client). Yet, when I try to run CPack, it first runs a 'preinstall' and try to build all targets. I want to build only the required targets and their dependencies.

这是我添加到我的 CMakeLists

if(UNIX)
    INSTALL(
        TARGETS ${PROJECT_NAME} 
        COMPONENT ${PROJECT_NAME}
        DESTINATION ${PROJECT_INSTALL_PATH}
        )

    SET(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/../deb)
    SET(CPACK_GENERATOR "DEB")
    SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
    SET(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_version})
    SET(CPACK_DEBIAN_PACKAGE_NAME ${PROJECT_NAME})
    SET(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_version})

    INCLUDE(CPack)
endif()

这是我尝试运行 cpack -V

CPack: Enable Verbose
CPack Verbose: Read CPack config file: 
CPack Verbose: Read CPack configuration file: [...]/CPackConfig.cmake
CPack Verbose: Specified generator: DEB
CPack Verbose: Use generator: cmCPackDebGenerator
CPack Verbose: For project: APP_client
CPack: Create package using DEB
CPack Verbose: Read description file: [...]/CPack.GenericDescription.txt
CPack Verbose: [DEB] requested component grouping = ONE_PER_GROUP
CPack Verbose: Remove toplevel directory: [...]/../deb/APP_client/_CPack_Packages/Linux/DEB
CPack: Install projects
CPack: - Run preinstall target for: ROOT
CPack Error: Problem running install command: /home/gitlab-runner/cmake/bin/cmake --build . --target "preinstall"
Please check [...]/../deb/APP_client/_CPack_Packages/Linux/DEB/PreinstallOutput.log for errors
CPack Error: Error when generating package: APP_client

预安装失败,因为它试图建立另一个目标并无法链接它。

The preinstall fails because it is trying to build another target and fails to link it.

我正在使用 CMake 3.5

推荐答案

每位用户在这里,可以通过向CPack询问您使用的CMake生成器来解决此问题。

Per one user here, it may be possible to workaround this behaviour by lying to CPack about what CMake generator you are using.

似乎CPack只运行预安装目标适用于使用Unix Makefiles作为CMake生成器的构建。将变量 CPACK_CMAKE_GENERATOR 设置为系统上可用的其他生成器将改变CPack的行为,但是CMake仍将使用指定为其使用的任何生成器进行构建。

It seems that CPack only runs the preinstall target for builds using Unix Makefiles as the CMake generator. Setting the variable CPACK_CMAKE_GENERATOR to a different generator available on your system will change CPack's behaviour, but CMake will still build using whatever generator was specified for it to use.

链接线程中的用户似乎很幸运将XCode指定为CPack CMake生成器,而我成功指定了Ninja。

The user in the linked thread seems to have had luck specifying XCode as the CPack CMake generator, and I've had success specifying Ninja.

例如,您可以尝试添加
set(CPACK_CMAKE_GENERATOR Ninja)
这样的行,以使CPack不会尝试运行预安装目标。

For example, you could try adding a line like set(CPACK_CMAKE_GENERATOR Ninja) so that CPack won't try to run the preinstall target.

这篇关于CPack尝试建立所有目标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆