c++ - 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”?
解决方案
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
推荐阅读
- apache-spark - 如何使用 Impala 读取包含复杂类型的 Hive 视图?
- javascript - For 循环不在 setTimeout 内迭代
- c# - 如何使统一的滑块显示在代码中?
- vb.net - 如何正确解析这个 JSON 字符串
- node.js - npm run 弹出后无法使用 JSX
- php - 如何插入……值……其中 Value= 等于用户给出的?复杂查询
- python - 采样音频不保留波(矢量)!
- html - 为什么开发人员在父 div 上使用 ::before 伪元素和 display:table
- javascript - 我不明白 $(".element").typed() 符号
- python - Python - 我应该按照我的想法迭代行吗?还是以不同的方式计划?