Linux
GNU make - 如何根據 shell 命令結果(GCC 版本)連接到變數?
我想向 CFLAGS make 變數添加另一個選項,具體取決於我想在 makefile 的“配置”部分中的配方之外執行的 shell 命令的結果。這就是我想出的:
GCC_VERSION := $(shell gcc -dumpversion); \ if [[ ${GCC_VERSION} > 5.0 ]] ; then \ CFLAGS += -D _POSIX_C_SOURCE=199309L; \ fi
首先,我使用 shell make 函式執行命令,如上所示。如果我執行上面的操作,它不會添加這個定義標誌。我有意在 linux 上使用 GCC 版本 5.4.0 執行此操作。我認為這是錯誤的,因為我必須創建一個新的 shell 來執行條件語句。儘管 GCC_VERSION 變數將不存在,但在那個新 shell 中。不過我可能是錯的。
如果我確實喜歡這樣(全部在一個外殼中):
$(shell GCC_VERSION=$(gcc -dumpversion); \ if [[ ${GCC_VERSION} > 5.0 ]] ; then \ CFLAGS += -D _POSIX_C_SOURCE=199309L; \ fi)
我得到錯誤:
*** recipe commences before first target. Stop.
是的,非常混亂。
如果有人可以提供幫助,我將不勝感激。謝謝。
有很多解決方案,包括這個。在你的 Makefile 使用
VERSION5 := $(shell \ GCC_VERSION=$$(gcc -dumpversion); \ [[ $$GCC_VERSION > 5.0 ]]; \ echo $$? ) ifeq (${VERSION5}, 0) CFLAGS += -D _POSIX_C_SOURCE=199309L endif
請特別注意,您需要在 shell 腳本中使用
$$
for$
each。如果字元串比較為真,則此 shell 回顯 05.0
,否則為 1,並將其保存在 make variableVERSION5
中。然後
ifeq
Makefile 中的測試將變數與 0 進行比較,如果匹配則編輯CFLAGS
變數。