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

时间:2019-04-12 14:01:27

标签: c++ cmake

我正在尝试使用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()

1 个答案:

答案 0 :(得分:0)

它以递归方式复制文件(其子目录从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)