2014-10-29 25 views
0

我有一個Makefile,我試圖創建一個規則,如果它們尚不存在(基於查看特定目錄)將生成RPMs,否則只是複製這些RPMs到其他目錄。Makefile規則有條件地運行腳本,然後複製文件

基本上我想要做的是:

if somedir/build does NOT has RPMs: 
    somedir/build.sh 

cp -R somedir/build/* destination 

我一直在使用$(shell if [[ -d somedir/build ]] ....)但沒有多少運氣玩弄。

+0

如果該目錄沒有任何* * RPMs?你可以通過make創建單獨的RPM,或者運行一個單獨的「gotta build'em all」腳本?什麼目標或先決條件目前處理您的RPM?有一個嗎? – 2014-10-29 12:55:16

+0

如果你使用make,爲什麼不把rpms作爲依賴鏈的一部分?你如何確定哪些rpms需要在shell腳本中構建? – user657267 2014-10-29 12:56:15

+0

@EtanReisner,因此'somedir/build.sh'構建RPM。根據這個我還沒有目標。 – codecraig 2014-10-29 13:54:08

回答

0

這是工作:

someproject_rpms: 
    @if [[ -d somedir/build ]] ; then \ 
     count=$$(find somedir/build -name "*.rpm" -type f | wc -l); \ 
     if [[ $$count -eq 0 ]]; then \ 
      $$(cd somedir && ./build.sh); \ 
     fi \ 
    else \ 
     $$(cd somedir && ./build.sh); \ 
    fi; \ 
    find somedir/build -name "*.rpm" -type f -exec cp {} somedestination \; 

不是最漂亮的,但很有效。

+0

是否要將目錄結構複製到目標或平面複製.rpms。前者是你的問題。你的答案是後者。所以你的答案在技術上不正確。你想要什麼? – 2014-10-30 09:49:13

+0

問題顯示我需要將RPM複製到目標(cp -R somedir/build/* destination),這也是我在答案中顯示的內容,對不對? – codecraig 2014-10-30 15:23:54

+0

沒有你的答案不復制目錄結構 - 它將所有文件平復制到目的地,而不復制目錄。我的答案其實也是這樣,但那是因爲我根據自己的猜測回答了你的真實想法。 – 2014-10-31 03:01:59

0

你應該使用所謂的「哨兵」文件。這些是空文件,僅用於它們的時間戳,時間戳表示某個動作的完成,通常會創建一堆其他文件,其名稱我們可能或可能不知道。命名rpms兩個文件是定點的文件,這裏是您的解決方案Makefile

destination/rpms: somedir/build/rpms Makefile 
    find $(<D) -name *.rpm -exec cp {} $(@D) \; 
    touch [email protected] 

somedir/build/rpms: $(PACKEES) Makefile 
    somedir/build.sh 
    touch [email protected] 

PACKEES現在是空的,但你應該將其設置爲你想要的已經包裝成任何你的RPM的文件換句話說,build.sh讀取的所有文件。如果你堅持要用一個build.sh腳本來構建的,一旦你所有進去(這是不是一個好主意),上述最好的,你會得到:)

+0

雖然我完全同意這個*概念*作爲一個更好的概念,然而我在我的評論中給了我。事實上,我認爲這個實施並不更好。如果RPM被刪除但沒有源文件改變(除非你將它們包含在'$(PACKEES)'中,你當然可以這麼做)它不重建RPMS。它還需要手動保存一份清單,如果保存錯誤,清單不會在您希望的時候生成(更簡單的缺少生成測試的失敗模式)。有一個原因,我花了一段時間的腳本來從我的spec文件中提取需求文件。 =) – 2014-10-30 23:14:01

+0

@Etan,好,所以我們在這裏禮貌地不同意哲學。我不允許在構建系統中進行任意刪除。對我而言,構建系統是一種狀態機器,只允許某些操作:觸摸源,製作目標,包括清潔。但不能手工刪除。如果用戶這樣做,他們是自己的。這正是我在我的手冊中所說的。其次,我認爲「手動保存名單」實際上是一個加號,而不是減號。恕我直言,所有的文件列表,應該由用戶明確聲明,如果可能的話,通配符或某些類似找不到。當然,只在一個地方宣佈,不會重複。 – 2014-10-31 02:58:30

+0

我幾乎完全同意這一理念,我一直在努力讓工作中的構建工作達到一切正常工作並且可以可靠重建的程度(儘管CI似乎每次都希望完全清理構建,可能是因爲大多數人們沒有得到這個權利)。但是,我認爲這有點清楚,但這種情況並非如此。在另一種情況下,我相信我們可以花一段時間討論這些我想象中的卓有成效的事情。 – 2014-10-31 13:04:26