3

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

更多细节:
我的场景是目录结构,例如:

项目
  --CMakeLists.txt
  --SubMod A
      --CMakeListsA.txt
  --SubMod B
      --CMakeListsB.txt

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

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

4

1 回答 1

2

我认为您能做的最好的事情是将其包装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} ...)
于 2012-07-17T19:20:50.163 回答