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

如何为所有子模块添加CMake自定义目标,cmake,Cmake,简介: 有人知道是否可以在CMake中添加包含在所有子模块中的自定义_目标吗?例如,如何将安装/运行测试/包目标添加到构建中的每个子模块 更多详细信息: 我的方案是针对目录结构,例如: Project --CMakeLists.txt --SubMod A --CMakeListsA.txt --SubMod B --CMakeListsB.txt 项目 --CMakeLists.txt --亚模A --CMakeListsA.txt --亚模B --CMak

简介:
有人知道是否可以在CMake中添加包含在所有子模块中的自定义_目标吗?例如,如何将安装/运行测试/包目标添加到构建中的每个子模块

更多详细信息:
我的方案是针对目录结构,例如:

Project --CMakeLists.txt --SubMod A --CMakeListsA.txt --SubMod B --CMakeListsB.txt 项目 --CMakeLists.txt --亚模A --CMakeListsA.txt --亚模B --CMakeListsB.txt 我想在顶级CMakeLists.txt文件中添加一个用于生成强氧的自定义_目标,并将其包含在子模块a和B中。所有模块之间的命令将完全相同


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

我认为您最好将
添加自定义目标
包装在顶级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} ...)

嗯,这确实解决了大部分问题,但不是很理想。然而,我并不完全确定是否有一个更好的答案,这是我所期待的。@jmcarty是的,可能确实有一个更好的方法。我会等一等,看看是否有一个厨具的家伙加入进来。看起来好像没有其他人加入进来,这确实完成了我大部分想要的。谢谢