我的问题如下。
我有一个简单的cmake项目,该项目依赖于其他两个包含CMakeLists.txt文件的库(A和B)。我通过add_subdirectory()
命令添加它们。我想将CPack用作生成nsis,zip和deb软件包的工具。问题是前面提到的库中的install()命令使CPack打包了许多对我的应用程序来说多余的文件。例如,除了在软件包中仅包含A和B生成的MyApp可执行文件和dll之外,我还从A和B获取标头,源代码和其他内容。
所以我的问题是:如何更改子目录的install()命令的行为?或者也许我如何使CPack至少不考虑它们(如果可以的话,至少可以使用install(FILES ...)
手动复制所需的文件。)还是有其他方法可以实现我的目标。我的cmake示例如下:
cmake_minimum_required (VERSION 3.10)
project(MyApp VERSION 0.1.0)
add_subdirectory(${CMAKE_SOURCE_DIR}/libs/A)
add_subdirectory(${CMAKE_SOURCE_DIR}/libs/B)
add_executable(MyApp ${SOURCEFILES})
target_include_directories(...)
target_link_libraries(...)
install(TARGETS MyApp
RUNTIME DESTINATION ".")
SET(CPACK_PACKAGE_NAME "MyApp")
SET(CPACK_PACKAGE_VERSION_MAJOR ${CMAKE_PROJECT_VERSION_MAJOR})
SET(CPACK_PACKAGE_VERSION_MINOR ${CMAKE_PROJECT_VERSION_MINOR})
SET(CPACK_PACKAGE_VERSION_PATCH ${CMAKE_PROJECT_VERSION_PATCH})
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyApp Summary")
SET(CPACK_PACKAGE_HOMEPAGE_URL "url")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "MyApp")
SET(CPACK_PACKAGE_EXECUTABLES "MyApp;MyApp")
include(CPack)
编辑: 更准确地说,我希望不要直接更改子目录的CMakeLists.txt文件。