2010-08-06 45 views
2

我想以一種既可以包含在Makefile中也可以包含在shell腳本中的形式發佈一組構建變量(應該附加到LDFLAGS) 。定義用於Makefile和Shell腳本的變量

我現在有一個文件buildflags.conf:

LDFLAGS_EXTRA="-static -foo -bar" 

我希望我的用戶能夠,當他們正在使用的makefile:

include buildflags.conf 
LDFLAGS+=$LDFLAGS_EXTRA 

或者,當他們」重新使用shell腳本,做這樣的事情:

. buildflags.conf 
gcc myapp.o -o myapp $LDFLAGS_EXTRA 

然而,這並不工作,因爲需要的bash在我LDFLAGS_E報價XTRA定義,而make不需要它們。

任何人都有解決方案嗎?我不想維護多個獨立的buildflags文件,儘管一組腳本從單個定義文件開始,並使其適合包含在不同的上下文中會很好。

回答

2

我想說的最簡單的解決方法就是包括包含在你的化妝配方中的變量定義(如果你的食譜很簡單能正常工作)的shell腳本:

target: sources 
    . buildflags.conf ; \ 
    gcc -o [email protected] $^ $$LDFLAGS_EXTRA 

注意的額外$可變用法和兩條線實際上是一條語句的事實,;\非常重要。

+0

謝謝,這看起來是個好主意。我懷疑大多數用戶會使用makefile,所以我寧願在shell腳本上增加額外的負擔。有沒有任何方法將其變量導出到shell腳本中? – Wim 2010-08-06 10:14:57

+0

使用讀取配置的其他shell腳本可以接受嗎?如果是這樣,只需要做一些類似於'eval \'awk -F ='{printf「%s = \」%s \「\ n」,$ 1,$ 2}' Ivo 2010-08-06 13:17:23

+0

完美!在此期間,我通過在包裝腳本中構建單獨的版本,使用類似於您的'awk'命令解決了這個問題。 – Wim 2010-08-06 13:51:02

1

伊沃在他的評論的解決方案已經給我帶來了一個又一個的作品以及和更規範的Makefile文件:

1)定義LDFLAGS_EXTRA如問題

2)後處理的列表中使用Makefile中

LDFLAGS_EXTRA_POST=$(subst ",,${LDFLAGS_EXTRA}) 

3)確保僅供參考LDFLAGS_EXTRA_POST Makefile中