我正在尝试为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设置为Release,则install(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

关于c++ - cmake install "noconfig"脚本有哪些用途? IE。 "XXXTarget-noconfig.cmake",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50960497/

10-11 21:11