2022-05-12 Cmake递归包含头文件的方法

函数定义如下

# 递归包含头文件的函数
function(include_sub_directories_recursively root_dir)
    if (IS_DIRECTORY ${root_dir})               # 当前路径是一个目录吗,是的话就加入到包含目录
        #        if (${root_dir} MATCHES "include")
        message("include dir: " ${root_dir})
        include_directories(${root_dir})
        #        endif()
    endif()

    file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) # 获得当前目录下的所有文件,让如ALL_SUB列表中
    foreach(sub ${ALL_SUB})
        if (IS_DIRECTORY ${root_dir}/${sub})
            include_sub_directories_recursively(${root_dir}/${sub}) # 对子目录递归调用,包含
        endif()
    endforeach()
endfunction()

使用如下

# 递归包含工程文件夹下的头文件,这里直接把CMakelist.txt所在文件夹下的文件夹都包含
include_sub_directories_recursively(${PROJECT_SOURCE_DIR})



# 使用了上面函数就不需要如下面地一个个文件夹去包含了
# 添加文件路径到头文件搜索路径
# 下面的 ${PROJECT_BINARY_DIR} 就是生成的可执行文件所在的文件夹
#t arget_include_directories(server PUBLIC "${PROJECT_BINARY_DIR}")
# 添加XmlBase文件夹到头文件搜索路径中
#target_include_directories(server PUBLIC "${PROJECT_SOURCE_DIR}/XmlBase")

你可能感兴趣的:(2022-05-12 Cmake递归包含头文件的方法)