我想通過使用Makefile來收集一些源檔案并將其制成焦油。這些源檔案散布如下:
專案
│
├──Makefile
│
├──檔案夾(名字是任意的)
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├──source2.cpp
│
├── Source.h
.
.
現在,我想有一個扁平化的tarball檔案,當我在根目錄(project)中呼叫make時,包括這個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) )
$(名稱): $(檔案)
COPYFILE_DISABLE=true tar -vczf $(NAME) $(FILES)
我對makefile和bash不熟悉,但我盡力去玩,做了一些搜索,但一無所獲。目前的版本只能生成類似于
的東西。 NAME.tar.gz
│
├──Makefile
│
├──檔案夾
│ │
│ ├── test1.txt
│ ├── test2.txt
│ .
│ .
│ .
│
├── source.cpp
│
├──source2.cpp
│
├── Source.h
.
.
隨著檔案夾結構的變化。我想我可能會先把檔案夾中的所有源檔案復制到根目錄下,然后在tar后洗掉它們。有什么更好的方法可以優雅地做到這一點嗎?
uj5u.com熱心網友回復:
好吧,你可以這樣做,但如果你使用GNU tar,那么可能更簡單的是讓tar為你做作業,而不是先把檔案復制到一個臨時位置。
像這樣的方法應該可以:
$(NAME): $(FILES)
COPYFILE_DISABLE=true tar -vczf $(NAME) --transform='s,.*/,,' $(FILES)
這將洗掉生成的tar檔案內所有檔案的目錄。 參見手冊中的--transform選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/308025.html
標籤:
