2013-06-03 19 views
1

我正在嘗試編寫一個簡單的Autotool軟件包,它只打包一個腳本。這可能看起來有些過度,但是腳本將被添加到嵌入式系統的構建系統中,並且構建系統被設計爲與Autotools良好地配合。使用Autotools打包Shell腳本時出錯

我有一個名爲wifi_query.sh的shell腳本。要打包這個我已經按照以下步驟操作:

  1. 創建Makefile.am包含以下 -

    bin_SCRIPTS = wifi_query.sh 
    CLEANFILES = $(bin_SCRIPTS) 
    
  2. 我還創建wifi_query.sh.in其中包含線exec wifi_query.sh。我不確定我瞭解.in文件的用途。然後運行autoscan
  3. 然後我運行:

    sed -e 's/FULL-PACKAGE-NAME/wifi_query/' \ 
    -e 's/VERSION/1/' \ 
    -e 's|BUG-REPORT-ADDRESS|/dev/null|' \ 
    -e '10i\ 
    AM_INIT_AUTOMAKE' \ 
    <configure.scan> configure.ac 
    
  4. 運行touch NEWS README AUTHORS ChangeLog

  5. 運行autoreconf -iv

  6. ./configure

  7. make distcheck

當我運行make distcheck我得到一個錯誤說:「*沒有規則,使目標的wifi_query.sh」 ,'all-am'需要,停下來。「

我不明白這個錯誤,如果有人能給我任何好的指針。我的懷疑是這個錯誤可能是由於wifi_query.sh.in,但我的autotools體驗非常有限。

+0

你自己的回答是正確的,'wifi_query.sh.in'沒有引起問題;但也不是必要的。如果是這樣,它的目的是將平臺相關代碼交換到'wifi_query.sh'中。 – ptomato

+0

如果你沒有對「NEWS」,「README」等有意義的內容,請考慮使用'AM_INIT_AUTOMAKE([foreign])',然後刪除空文件。 – chirlu

回答

1

看來我需要用dist_bin_SCRIPTS = wifi_query.sh替換bin_SCRIPTS = wifi_query.shMakefile.am。做完這一切似乎工作。

+1

這不是正確的方法。如果你使用'dist_bin_SCRIPTS',你不能使用'wifi_query.sh.in';只需調用腳本'wifi_query.sh'即可。如果你使用'wifi_query.sh.in'(這看起來你不需要;如果你需要它,你會理解它的目的),你必須在'AC_CONFIG_FILES'(在'configure.ac'中)添加'wifi_query.sh'生成一個規則,從'wifi_query.sh.in'構建它 –

+0

是的,這是正確的,我忘了補充說'wifi_query.sh.in'現在已經從包中刪除了。 – James