這是關於這個問題的後續處理:Can I use GNU make's SHELL variable to connect to a remote shell?如何在gnu-make的配方中重置SHELL變量兩次?
我想在一個配方中使用兩個不同的殼。一個外殼在主機上,另一個在沒有製造的目標設備上。 主機上的外殼用於跟蹤測試的成功和失敗。 目標設備上的外殼用於執行測試。 我已經成功使用$(eval SHELL =)從主機shell更改爲目標shell。但是,當我在配方中添加$(eval SHELL =)時,SHELL似乎永遠不會改變。我假設在配方運行之前評估兩個eval函數,所以第二個擴展取消了第一個擴展。 有沒有辦法讓這些eval函數在運行時間內擴展,或者在單一配方中另外更改SHELL變量兩次?
爲了說明什麼,我瞄準,這將是這樣的:
test: test_dependencies
touch $host_files_for_tracking
SHELL = target_shell
$(program_to_test) $(params) -o result
cmp result gold
SHELL = host_shell
rm $host_files_for_tracking
感謝。
注意:當我談論SHELL時,我指的是make-internal變量,它決定了哪個shell爲了執行配方步驟而調用,而不是環境變量。
.PHONY: test test_dependencies
test : test_target test_host
test_host : test_target # to enforce the order
test_target test_host : test_dependencies
shell_orig := $(SHELL)
目標相關的規則看起來像這樣:
.PHONY: test_target test_target_touch
test_target: test_target_touch
test_target_touch: SHELL = $(shell_orig)
touch $host_files_for_tracking
test_target: SHELL = target_shell
$(program_to_test) $(params) -o result
和主機
嗨Eldar, 你的建議看起來很有趣。我一定會嘗試一下! – nitzanms 2012-07-24 12:04:04