为什么foo-config.cmake和foo-config-version.cmake应该分开?

问题描述 投票:1回答:1

[在Daniel Pfeiffer(Effective CMake)和Deniz Bahadir(More Modern CMake)的谈话中,甚至在CMake documentation中,建议(至少)生成.cmake文件以使用带有CMake在其他项目中:foo-config.cmakefoo-config-version.cmake(对于程序包foo;另一个可能的命名方案是FooConfig.cmakeFooConfigVersion.cmake)。

这对我来说似乎已经很奇怪了,为什么foo-config.cmake还不应该包含有关已安装版本的信息/命令?

[Edit:截断了该问题的其余部分,以求重点,因为我记错了。

cmake packaging buildconfiguration software-packaging
1个回答
0
投票

评论太多,但答案还不完整:

我生成的项目中的典型顺序是使用CMakePackageConfigHelperGNUInstallDirs模块来自CMake。

无需生成foo-config-version.cmake模板。只需使用此模块中的write_basic_package_version_file命令即可完成操作。

export命令非常方便,如果您想使用构建目录中的配置软件包而无需安装它们。

查看示例:

# Support find_package(Foo NO_MODULE).
set(FOO_DOC_DIR ${CMAKE_INSTALL_DOCDIR})
set(FOO_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
set(FOO_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
set(FOODIR ${CMAKE_INSTALL_PREFIX})

include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

configure_package_config_file(foo-config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/foo-config.cmake"
  INSTALL_DESTINATION ${FOO_CONFIG_PACKAGE_LOCATION}
  PATH_VARS FOODIR FOO_INCLUDE_DIR FOO_LIB_DIR FOO_DOC_DIR
)

write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/foo-config-version.cmake"
  VERSION ${PROJECT_VERSION}
  COMPATIBILITY SameMajorVersion
)

# To make the component usable not only from the install directory but also from the build directory
export(
  TARGETS Foo
  FILE foo-export.cmake
)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/foo-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/foo-config-version.cmake"
  DESTINATION ${FOO_CONFIG_PACKAGE_LOCATION}
  COMPONENT development
)

install(EXPORT Foo
  DESTINATION ${FOO_CONFIG_PACKAGE_LOCATION}
  NAMESPACE ${PROJECT_NAME}::
  FILE foo-export.cmake
  COMPONENT development
)
© www.soinside.com 2019 - 2024. All rights reserved.