Configure_file一次创建目录及其子目录,有一次不创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Configure_file一次创建目录及其子目录,有一次不创建相关的知识,希望对你有一定的参考价值。

我试图通过使用configure_file将文件从一个目的地复制到另一个目的地。我找到了以下解决方案How to copy directory from source tree to binary tree?

function(USR_copy_directory srcDir destDir)
    make_directory($destDir)
    file(GLOB_RECURSE files RELATIVE $srcDir $srcDir/*)
    foreach(file $files)
        set(srcFile $srcDir/$file)
        if(NOT IS_DIRECTORY $srcFile)
            configure_file($srcFile $destDir/$file COPYONLY)
        endif(NOT IS_DIRECTORY $srcFile)
    endforeach(file)
endfunction()

这个解决方案让我可以完成这项工作。但当我试图将for放在另一个函数中时,它停止创建目录。它只是平面复制文件而不保留结构。基本上两个代码片段是相同的,只是我删除了for循环并将其放在另一个函数中,就是这样。我究竟做错了什么?

function(USR_copy_directory srcDir destDir)
    make_directory($destDir)
    file(GLOB_RECURSE files RELATIVE $srcDir $srcDir/*)
    set(srcFile "")
    foreach(file $files) #this for loop allows me to append file and path
        list(APPEND srcFile "$srcDir/$file")
    endforeach(file)
    USR_copy_files("$srcFile" $destDir)
endfunction()


function(USR_copy_files files destDir)
    foreach(file $files)
        if(NOT IS_DIRECTORY $file)
            get_filename_component(filename $file NAME)
            configure_file($file  $destDir/$filename COPYONLY)
        endif(NOT IS_DIRECTORY $file)
    endforeach(file)
endfunction()

答案

它以递归方式复制文件(子目录从srcDir到destDir,它基于How to copy directory from source tree to binary tree?答案

# Copies files from source directory to destination directory, substituting any
# variables.  Create destination directory if it does not exist.

macro (configure_files srcDir destDir)
    message (STATUS "Configuring directory $destDir")
    make_directory ($destDir)

    file (GLOB templateFiles RELATIVE $srcDir "$srcDir/*")
    foreach (templateFile $templateFiles)
        set(srcTemplatePath $srcDir/$templateFile)
        if (NOT IS_DIRECTORY "$srcTemplatePath")
            message(STATUS "Configuring file $templateFile")
            configure_file(
                    "$srcTemplatePath"
                    "$destDir/$templateFile"
                    @ONLY)
        else (NOT IS_DIRECTORY "$srcTemplatePath")
            configure_files("$srcTemplatePath" "$destDir/$templateFile")
        endif (NOT IS_DIRECTORY "$srcTemplatePath")
    endforeach (templateFile $templateFiles)
endmacro (configure_files srcDir destDir)

以上是关于Configure_file一次创建目录及其子目录,有一次不创建的主要内容,如果未能解决你的问题,请参考以下文章

mkdirp——递归创建目录及其子目录

CMake configure_file没有源代码构建

PHP核心编程--目录操作(包含文件操作)

Linux系统基础命令总结

java遍历文件夹及其子目录

pycharm创建新项目没有权限