Makefile .tar:扁平化源文件的目录结构
Makefile .tar: Flatten the source files' directory structure
我想收集一些源文件并 tar 使用 Makefile。源文件分布如下:
project
│
├── Makefile
│
├── folder(name is arbitrary)
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.
现在,当我在根目录中调用 make
时,我想要一个扁平化的 tarball 文件,其中包含此 tarball 文件根目录下的所有源文件目录(项目),像这样:
myTarball.tar.gz
│
├── Makefile
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
│
├── test1.txt
│
├── test2.txt
│
.
.
.
当前的 make 文件看起来像这样:
FILES=$($(wildcard Makefile *.h *.hpp *.cpp test*.txt */test*.txt))
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) $(FILES)
我对 makefile 和 bash 不熟悉,但我尽力尝试并进行了一些搜索,但一无所获。当前的只能生成类似
的东西
NAME.tar.gz
│
├── Makefile
│
├── folder
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.
与文件夹结构。我想我可能会先将文件夹中的所有源文件复制到根目录,然后在 tar 之后删除它们。有没有更好的方法来优雅地做到这一点?
好吧,你可以这样做,但是如果你使用 GNU tar 那么让 tar 为你完成工作可能比将文件复制到临时文件更简单位置第一。
像这样的东西应该可以工作:
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) --transform='s,.*/,,' $(FILES)
这将从生成的 tar 文件中的文件中删除所有目录。请参阅 --transform
选项的手册。
我想收集一些源文件并 tar 使用 Makefile。源文件分布如下:
project
│
├── Makefile
│
├── folder(name is arbitrary)
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.
现在,当我在根目录中调用 make
时,我想要一个扁平化的 tarball 文件,其中包含此 tarball 文件根目录下的所有源文件目录(项目),像这样:
myTarball.tar.gz
│
├── Makefile
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
│
├── test1.txt
│
├── test2.txt
│
.
.
.
当前的 make 文件看起来像这样:
FILES=$($(wildcard Makefile *.h *.hpp *.cpp test*.txt */test*.txt))
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) $(FILES)
我对 makefile 和 bash 不熟悉,但我尽力尝试并进行了一些搜索,但一无所获。当前的只能生成类似
的东西 NAME.tar.gz
│
├── Makefile
│
├── folder
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├── source2.cpp
│
├── source.h
.
.
与文件夹结构。我想我可能会先将文件夹中的所有源文件复制到根目录,然后在 tar 之后删除它们。有没有更好的方法来优雅地做到这一点?
好吧,你可以这样做,但是如果你使用 GNU tar 那么让 tar 为你完成工作可能比将文件复制到临时文件更简单位置第一。
像这样的东西应该可以工作:
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) --transform='s,.*/,,' $(FILES)
这将从生成的 tar 文件中的文件中删除所有目录。请参阅 --transform
选项的手册。