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

时间:2012-07-17 14:04:01

标签: cmake

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

更多细节:
我的方案是对于目录结构,例如:

Project
  --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提供的目标很聪明,不能包含两次。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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