CMake自动添加子目录

转载自:https://blog.csdn.net/yunxinyi91/article/details/107485257

# 获取目录下的子目录名
# output 子目录名称列表, 填充时不能加${}
# target 目标路径, 全路径
macro(list_subdir output target)
    file(GLOB children ${target}/*)
    set(dir_list "")
    foreach(child ${children})
        file(RELATIVE_PATH child_name ${target} ${child})
        if(IS_DIRECTORY ${target}/${child_name})
            list(APPEND dir_list ${child_name})
        endif()
    endforeach()
    list(APPEND ${output} ${dir_list})
endmacro()

# 判断目录下是否有 CMakeLists
# output 是否含有 CMakeLists.txt, 填充时不能加 ${}
# target 目标路径, 全路径
macro(check_cmakelists output target)
    set(${output} FALSE)
    if(IS_DIRECTORY ${target})
        if(EXISTS ${target}/CMakeLists.txt)
            set(${output} TRUE)
        endif()
    else()
        message(FATAL_ERROR "Invalid dir para: ${target}")
    endif()
endmacro()
 
# 为含有 CMakeList 的子目录添加 add_subdirectory 调用
macro(add_all_subdirs)
    set(subdir_list "")
    list_subdir(subdir_list ${CMAKE_CURRENT_SOURCE_DIR})
    foreach(subdir ${subdir_list})
        set(has_cmakelist FALSE)
        check_cmakelists(has_cmakelist ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
        if(${has_cmakelist})
            add_subdirectory(${subdir})
        endif()
    endforeach()
endmacro()
posted @   尽千帆  阅读(198)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示