简介:
有谁知道是否可以在所有子模块中包含的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提供的目标很聪明,不能包含两次。
答案 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} ...)