gpt4 book ai didi

cmake - 如何为所有子模块添加 CMake 自定义目标

转载 作者:行者123 更新时间:2023-12-01 09:47:32 27 4
gpt4 key购买 nike

简介:
有谁知道是否可以在所有子模块中包含的 CMake 中添加 custom_target?一个示例是如何将 Install/Run_Tests/Package 目标添加到构建中的每个子模块。

更多详情:
我的场景是,对于目录结构,例如:

Project  --CMakeLists.txt  --SubMod A      --CMakeListsA.txt  --SubMod B      --CMakeListsB.txt

我想在顶层 CMakeLists.txt 文件中添加用于 doxygen 生成的 custom_target,并将其包含在子模块 A 和 B 中。所有模块之间的命令完全相同。

我可以将 custom_target 添加到每个子模块的 cmake 文件中,但这似乎是错误的。另一个问题是,如果我让 CMake 生成 Visual Studio 解决方案,将会与已经存在的“doc”项目发生冲突(如果打开顶级解决方案)。然而,CMake 提供的目标足够智能,不会被包含两次。

最佳答案

我认为您能做的最好的事情是将 add_custom_target 包装在顶层 CMakeLists.txt 中定义的函数中,并在每个 CMakeLists.txt 中使用它。

为了避免重复目标名称的问题,您可以定义如下函数:

function(AddDoxygenTarget)
add_custom_target(Doxygen${PROJECT_NAME} ...)
endfunction()

这取决于每个子模块的 CMakeLists.txt 都有一个 project 命令。如果没有,您可以使用每个子目录的名称:

  get_filename_component(SubDirName ${CMAKE_CURRENT_LIST_DIR} NAME)
add_custom_target(Doxygen${SubDirName} ...)

关于cmake - 如何为所有子模块添加 CMake 自定义目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com