情況很簡單。我有一組文件(.extA)和一個( .extB)。從所有的* .extB我用shell腳本生成.extA。然後我想將所有* .extA文件複製到安裝目錄。這不會發生在生成的文件中。Makefile生成的文件不被複制
convert:
./convertFile.sh
DATA = $(wildcard ./data/*.extA)
TARGET := $(patsubst ./data/%.extA, ../install/data/%.extA, $(DATA))
install: $(TARGET)
../install/data/%.extA: ./data/%.extA
cp -f $< [email protected]
因此,DATA不包含myfile.extA,並且cp不會複製它。作爲蠻力來解決這個問題我改變的數據到:
DATA = $(wildcard ./data/*.extA) ./data/targetFile.extA
雖然這解決了這個問題,我也很難相信,這不能以更優雅的方式來完成。如果我有100個生成的文件怎麼辦?在這種情況下我錯過了什麼?我如何確保在隱式規則完成之前不對數據進行評估?我也嘗試使用一個叫做convert的規則,但是我不能讓這個變量取決於規則...
我的選擇是什麼?
謝謝!
更新: convertFile.sh腳本選取所有* .extB文件並從它們創建extA文件。這實際上是在文件中的某些條目上進行base64編碼。所以這兩個文件是不可互換的。 將轉換規則更改回原始,因爲這只是一個最小樣本:)。現在這裏是場景:
01.extA
02.extA
03.extA
...
10.extA
11.extB
12.extB
...
98.extB
99.extA
所有這些* .extB文件都轉換爲extA使用轉換。但是,由於DATA不包含任何這些文件,因此它們不會被複制到安裝目標中。
在一個理想的世界,我要實現以下目標: 轉換的EXTB文件EXTA文件 - >複製所有axtA文件來安裝(包括產生的)
乾淨規則刪除所有轉換EXTA文件,因爲它們應該永遠不會在存儲庫中結束,但這僅僅是爲了獲得額外的信息,所以我不能在一天中的其他時間進行前期轉換並使用make。
兩個問題:爲什麼使用'mkdir -p'而不是'install -D -d'?爲什麼用'@'隱藏這些命令? –
我不能直接包含任何extB,因爲它們的格式不正確。我會更新我的帖子。 –
@TobySpeight問題1:我使用FreeBSD,在其Makefile中定義了幾個宏而不創建目錄('COPYTREE_SHARE','COPYTREE_BIN'等),並且應該用'mkdir'創建目錄。 Q2:它是可選的。 – uzsolt