CMake官方教程中文翻译 Step 11: Adding Export Configuration

鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。
英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里
或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html

因为官方文档有点多,所以只截取CMake Tutorial的 step1——step12 进行翻译,这是第11步的翻译,以下是每一步的翻译链接:
Documentation » CMake Tutorial » Step 1: A Basic Starting Point
Documentation » CMake Tutorial » Step 2: Adding a Library
Documentation » CMake Tutorial » Step 3: Adding Usage Requirements for a Library
Documentation » CMake Tutorial » Step 4: Adding Generator Expressions
Documentation » CMake Tutorial » Step 5: Installing and Testing
Documentation » CMake Tutorial » Step 6: Adding Support for a Testing Dashboard
Documentation » CMake Tutorial » Step 7: Adding System Introspection
Documentation » CMake Tutorial » Step 8: Adding a Custom Command and Generated File
Documentation » CMake Tutorial » Step 9: Packaging an Installer
Documentation » CMake Tutorial » Step 10: Selecting Static or Shared Libraries
[Documentation » CMake Tutorial » Step 11: Adding Export Configuration]
Documentation » CMake Tutorial » Step 12: Packaging Debug and Release

谷歌翻译可能有错,此文档的目的仅是加快观看英文官方文档的速度,所以请结合英文官方文档观看

Step 11: Adding Export Configuration

在本教程的安装和测试期间,我们添加了 CMake 安装项目库和标头的功能。 在打包安装程序期间,我们添加了打包此信息的功能,以便可以将其分发给其他人。

下一步是添加必要的信息,以便其他 CMake 项目可以使用我们的项目,无论是来自构建目录、本地安装还是打包时。

第一步是更新我们的 install(TARGETS) 命令,不仅指定 DESTINATION,还指定 EXPORT。 EXPORT 关键字生成一个 CMake 文件,其中包含用于从安装树导入安装命令中列出的所有目标的代码。 因此,让我们继续通过更新 MathFunctions/CMakeLists.txt 中的安装命令来显式导出 MathFunctions 库,如下所示:

MathFunctions/CMakeLists.txt
set(installable_libs MathFunctions tutorial_compiler_flags)
if(TARGET SqrtLibrary)
list(APPEND installable_libs SqrtLibrary)
endif()
install(TARGETS ${installable_libs}
EXPORT MathFunctionsTargets
DESTINATION lib)
# install include headers
install(FILES MathFunctions.h DESTINATION include)

现在我们已经导出了 MathFunctions,我们还需要显式安装生成的 MathFunctionsTargets.cmake 文件。 这是通过将以下内容添加到顶级 CMakeLists.txt 的底部来完成的:

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

此时您应该尝试运行 CMake。 如果一切设置正确,您将看到 CMake 将生成如下错误:

Target “MathFunctions” INTERFACE_INCLUDE_DIRECTORIES property contains
path:

“/Users/robert/Documents/CMakeClass/Tutorial/Step11/MathFunctions”

which is prefixed in the source directory.

CMake 想说的是,在生成导出信息的过程中,它将导出一条与当前机器本质上相关的路径,并且在其他机器上无效。 解决方案是更新 MathFunctions target_include_directories() 以了解在构建目录和安装/包中使用它时需要不同的接口位置。 这意味着将 MathFunctions 的 target_include_directories() 调用转换为如下所示:

MathFunctions/CMakeLists.txt
target_include_directories(MathFunctions
INTERFACE
$
$
)

更新后,我们可以重新运行 CMake 并验证它是否不再发出警告。

此时,我们已经 CMake 正确打包了所需的目标信息,但我们仍然需要生成 MathFunctionsConfig.cmake,以便 CMake find_package() 命令可以找到我们的项目。 因此,让我们继续将一个名为 Config.cmake.in 的新文件添加到项目的顶层,其中包含以下内容:

Config.cmake.in

@PACKAGE_INIT@

include ( “${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake” )

然后,要正确配置和安装该文件,请将以下内容添加到顶级 CMakeLists.txt 的底部:

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

include(CMakePackageConfigHelpers)

接下来,我们执行configure_package_config_file()。 此命令将配置提供的文件,但与标准的 configure_file() 方式有一些具体差异。 为了正确利用此功能,输入文件除了所需的内容之外还应该有一行包含文本@PACKAGE_INIT@。 该变量将被替换为将设置值转换为相对路径的代码块。 这些新值可以通过相同的名称引用,但前面带有 PACKAGE_ 前缀。

CMakeLists.txt
install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)

include(CMakePackageConfigHelpers)
# generate the config file that includes the exports
configure_package_config_file( C M A K E C U R R E N T S O U R C E D I R / C o n f i g . c m a k e . i n " {CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in " CMAKECURRENTSOURCEDIR/Config.cmake.in"{CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
INSTALL_DESTINATION “lib/cmake/example”
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

接下来是 write_basic_package_version_file()。 此命令写入一个由 find_package() 使用的文件,记录所需包的版本和兼容性。 在这里,我们使用Tutorial_VERSION_*变量并说它与AnyNewerVersion兼容,这表示该版本或任何更高版本都与请求的版本兼容。

CMakeLists.txt
write_basic_package_version_file(
“${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake”
VERSION “${Tutorial_VERSION_MAJOR}.${Tutorial_VERSION_MINOR}”
COMPATIBILITY AnyNewerVersion
)

最后,设置要安装的两个生成的文件:

CMakeLists.txt
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake
DESTINATION lib/cmake/MathFunctions
)

至此,我们已经为项目生成了可重定位的 CMake 配置,可以在项目安装或打包后使用。 如果我们希望我们的项目也可以从构建目录中使用,我们只需将以下内容添加到顶层 CMakeLists.txt 的底部:

CMakeLists.txt
export(EXPORT MathFunctionsTargets
FILE “${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsTargets.cmake”
)

通过此导出调用,我们现在生成一个 MathFunctionsTargets.cmake,允许其他项目使用构建目录中配置的 MathFunctionsConfig.cmake,而无需安装它。

你可能感兴趣的:(CMake,c++,算法,机器人,linux)