首页 > 解决方案 > cmake install "noconfig" 脚本有什么用?IE。“XXXTarget-noconfig.cmake”

问题描述

我正在尝试编写必要的脚本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”?

标签: c++cmake

解决方案


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

推荐阅读