gpt4 book ai didi

c++ - 我可以简化这种安装和导出基于 CMake 的项目的方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:35 24 4
gpt4 key购买 nike

注意:重新提出之前写得不好的问题。

使用 CMake 的包/库开发人员应该如何让他们的包有效地安装在系统上,以及在另一个基于 CMake 的项目中轻松集成/使用?

根据经常链接到 talk作者 Daniel Pfeiffer(幻灯片 here),这是一个如何完成的示例:

CMakeLists.txt 中:

find_package(Bar 2.0 REQUIRED)
add_library(Foo ...)
target_link_libraries(Foo PRIVATE Bar::Bar)

install(TARGETS Foo EXPORT FooTargets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)

install(EXPORT FooTargets
FILE FooTargets.cmake
NAMESPACE Foo::
DESTINATION lib/cmake/Foo
)

在第二个文件中(哪个?):

include(CMakePackageConfigHelpers)
write_basic_package_version_file("FooConfigVersion.cmake"
VERSION ${Foo_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES "FooConfig.cmake" "FooConfigVersion.cmake"
DESTINATION lib/cmake/Foo
)

在第三个文件(哪个?)中:

include(CMakeFindDependencyMacro)
find_dependency(Bar 2.0)
include("${CMAKE_CURRENT_LIST_DIR}/FooTargets.cmake")

所以,我们有:

  • 至少四个不同的 CMake 文件(CMakeLists.txtFooTargets.cmakeFooConfig.cmakeFooConfigVersion.cmake)
  • ... 不止一个是生成的,但是不止一个是手写的
  • ...并且还相互包含
  • ...谁的名字不能更清楚地说明谁在做什么
  • ... 安装了一些,但不是全部。

我一直对此感到困惑和困惑。 Pfeifer 说:“我希望这更简单;但至少它很简单”——实际上并没有那么简单。

问题:

  • 这能以某种方式简化吗?
  • 如果不是,为什么这些文件中的每一个都很重要?
  • 难道不能使用更少的动态生成的命令/脚本/文件来自动生成更多的文件吗?

最佳答案

总而言之:大约一年前,当我尝试这样做时,我有一个非常相似的设置。

在源代码中至少有 2 个文件:一个 CMakeLists.txt 和一个 config.cmake.in。然后我让 CMake 使用 configure_package_config_file() 生成 myproject-config.cmake。

在已安装的文件中,我还有导出的目标、配置和版本文件。

作为建议,看看您是否也可以使用 configure_package_config_file() 重用一个 config.cmake.in。

关于c++ - 我可以简化这种安装和导出基于 CMake 的项目的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57457518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com