cmake install“noconfig”脚本有什么用?IE。“XXXTarget-noconfig.cmake”

joh*_*003 7 c++ cmake

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

lib/cmake/Foo/FooTargets.cmake
lib/cmake/Foo/FooTargets-noconfig.cmake
Run Code Online (Sandbox Code Playgroud)

...以及项目提供的:

lib/cmake/Foo/FooConfig.cmake   (and maybe FooConfigVersion.cmake)
Run Code Online (Sandbox Code Playgroud)

...找到依赖项,然后包含生成的 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()
Run Code Online (Sandbox Code Playgroud)

但是这些配置是指什么?什么是“无配置”?

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

小智 6

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
Run Code Online (Sandbox Code Playgroud)

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

lib/cmake/Foo/FooTargets.cmake
lib/cmake/Foo/FooTargets-noconfig.cmake
Run Code Online (Sandbox Code Playgroud)