Bash

Makefile:已設置但具有空值的變數的預設值

  • September 21, 2018

我有一個 Makefile,它有一個變數,當變數未設置或設置但具有空值時,該變數需要具有預設值。

我怎樣才能做到這一點?

我需要這個,因為我在 shell 腳本中呼叫 make 並且 makefile 所需的值可以從 shell 作為 $1 傳遞。並將其傳遞給 makefile 我必須將其設置在 bash-script 中。


想法:(不優雅)在bash腳本中,可以檢查變數是否設置但具有空值,在這種情況下可以取消設置。


片段

注意:如果變數未在終端中定義,則以下內容將不起作用,因為它們是在 bash 腳本中設置的。

生成文件

dSourceP?=$(shell pwd)
Source?=$(notdir $(wildcard $(dSourceP)/*.md))

Bash 腳本

make all dSourceP="${1}" Source="${2}"

終端

bash ./MyScript.sh
bash ./MyScript.sh /home/nikhil/MyDocs
bash ./MyScript.sh /home/nikhil/MyDocs index.md

由於您使用的是 GNU make因此您可以使用operator?=

FOO ?= bar

但這不涉及預先存在的空(或者更確切地說,空)值。以下處理缺失值和空值:

ifndef FOO
override FOO = bar
endif

test:
   echo "$(FOO)"

.PHONY: test

(確保第 6 行以真正的製表符開頭。)

你會用

make FOO=blah

設置一個值。makemake FOO=將最終設置FOObar; 您需要override 覆蓋在命令行上設置的變數

引用自:https://unix.stackexchange.com/questions/470500