在GNUMakefile 中使用if-else的方式

主要是我想要針對某些build target做些條件判斷,只有當某些條件成立時,才可以繼續build target中的其他步驟,不然的話就中斷。

最基本的使用範例如下︰

build.target:
    if [ ! -d /home/ubuntu ]; then echo "ERROR: folder not exist"; exit 1; fi

# OR
build.target2:
    if [ ! -d /home/ubuntu ]; then \
        echo "ERROR: folder not exist"; \
        exit 1; \
    fi

Reference:

在執行shell 指令前帶入env file中的所有環境變數

由於目前使用的應用程式設定檔是寫在env file中,且為了讓應用程式的測試是可以依據不同env file下的參數而有更彈性的執行方式,所以就有了個需求是我必須在執行測試指令前要帶入env file中的所有環境變數…

一開始的想法很簡單,通常我們可以用下面的方式來執行指令DB_ADDR=127.0.0.1 && go test ./…,那這樣應該也可以用類似source test.env && go test ./...,結果完全無法帶入env file中的資訊。

後來在網路上找了大概知道可以用下面的指令來做到

export $(cat envs/test.env | xargs); go test -p=1 ./

但這樣可能會目前的user session 中有env file的那些環境變數,不是非常乾淨…

更乾淨的作法會是把上述指令寫進Makefile中,這樣每次執行完我們的測試以後,環境變數並不會寫進目前的user session中。

e2e_test::
   export $(shell cat envs/docker-local.env | xargs); go test ./...

References:

https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs/19331521