我正在尝试为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/