使用相对路径的CMake ARCHIVE_CREATE

f3temu5u  于 6个月前  发布在  Hive
关注(0)|答案(1)|浏览(86)

我有一个项目,我使用CMake的ARCHIVE_CREATE,它正确地生成'.zip'文件,下面是代码:

file(ARCHIVE_CREATE
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/bundle.zip"
  PATHS "${CMAKE_CURRENT_SOURCE_DIR}/assets/demo"
  FORMAT "zip"
  VERBOSE
)

字符串
其中${CMAKE_CURRENT_SOURCE_DIR}/assets/demo dir具有:

$ tree
.
├── blob
│   └── matrix.avif
└── scripts
    └── main.lua


但是,最终的目录结构是不同的,如下图所示:


的数据
我的问题是:如何确保压缩后的文件结构与目录完全相同?

1sbrub3j

1sbrub3j1#

我给予了,并结束了一个小的去程序:

package main

import (
    "archive/zip"
    "io"
    "os"
    "path/filepath"
)

func main() {
    baseDir := os.Args[1]
    file, err := os.Create("bundle.zip")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    w := zip.NewWriter(file)
    defer w.Close()

    walker := func(baseDir, path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if info.IsDir() {
            return nil
        }

        relPath, err := filepath.Rel(baseDir, path)
        if err != nil {
            return err
        }

        file, err := os.Open(path)
        if err != nil {
            return err
        }
        defer file.Close()

        f, err := w.Create(relPath)
        if err != nil {
            return err
        }

        _, err = io.Copy(f, file)
        if err != nil {
            return err
        }

        return nil
    }

    err = filepath.Walk(baseDir, func(path string, info os.FileInfo, err error) error {
        return walker(baseDir, path, info, err)
    })

    if err != nil {
        panic(err)
    }
}

字符串
在CMake上运行:

execute_process(COMMAND go run ${CMAKE_SOURCE_DIR}/assets/pack.go ${CMAKE_SOURCE_DIR}/assets/demo)

相关问题