cmake 安装"noconfig"脚本有什么用?即。 "XXXTarget-noconfig.cmake"

What are the cmake install "noconfig" scripts for? Ie. "XXXTarget-noconfig.cmake"

本文关键字:cmake XXXTarget-noconfig 安装 noconfig 脚本 什么      更新时间:2023-10-16

我正在尝试为find_package编写必要的脚本,以便为某些没有 cmake 构建或至少没有导出其目标的库导入目标,但以其他方式在安装路径中:CMAKE_PREFIX_PATH.例如,对于某些导出目标的库 Foo,有生成的文件:

lib/cmake/Foo/FooTargets.cmake
lib/cmake/Foo/FooTargets-noconfig.cmake

。以及项目提供的:

lib/cmake/Foo/FooConfig.cmake   (and maybe FooConfigVersion.cmake)

。它查找依赖项,然后包含生成的 FooTargets.cmake。

似乎生成的FooTargets.cmake通常只包含noconfig版本,通过通配符:

# Load information for each installed configuration.
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
file(GLOB CONFIG_FILES "${_DIR}/FooTargets-*.cmake")
foreach(f ${CONFIG_FILES})
include(${f})
endforeach()

但是这些配置指的是什么?什么是"noconfig"?

我猜配置是指调试或发布,当这些在 CMakeLists.txt 脚本中没有区分时,它只是生成"noconfig"作为默认值?

CMAKE_BUILD_TYPE变量指定单配置生成器上的构建类型(配置((例如,在为 make 或 ninja 生成构建脚本时(。此变量的值可以是空字符串(例如,在Qt Creator中加载CMake项目并选择Default配置时(。

如果CMAKE_BUILD_TYPE设置为Releaseinstall(EXPORT ...)生成

lib/cmake/Foo/FooTargets.cmake
lib/cmake/Foo/FooTargets-release.cmake

如果CMAKE_BUILD_TYPE设置为空字符串,则install(EXPORT ...)生成

lib/cmake/Foo/FooTargets.cmake
lib/cmake/Foo/FooTargets-noconfig.cmake