我正在尝试编写必要的脚本,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设置为Release则install(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)