这里主要说一下在Makefile中如何使用export环境变量(这里只谈论在linux下的,windows的没测试试过)。

需求是,在一个目标中设置一个环境变量,在依赖目标或命令中使用该环境变量。

因为在依赖目标或命令中经常需要根据不同的变量值做不同的处理。

设置环境变量值有三种方法:

  1. Makefile中直接: export 变量
  2. 目标命令中,在命令前:变量=值 command
  3. 单独定义一个目标(不能有命令),目标1: export 变量=值

直接上Makefile

.PHONY: all clean aa t0 t1 t2 t3 t4 t5 t6

# test.c
# char* ps = getenv("bb");
# printf("bb=%s\n", ps ? ps : "no bb");

# bb=99
export bb=99

aa:
    echo $$bb

test: test.c
    gcc -o test test.c

t0: export bb=00
t0: test aa
    ./test

t1: test aa
    bb=11
    make aa
    ./test

t2: test
    export bb=22
    make aa
    ./test

t3: test
    bb=33 make aa
    bb=33 ./test

t4: export bb=44
t4: test
    make aa
    ./test

t5: bb=55
t5: test
    make aa
    ./test

#多加一种方法,这种可以避免Makefile中有export bb的情况(与t5的差别)
t6: export bb=66
t6: test aa
    ./test

clean:
    rm -f test

简单说一下执行结果:

t0 -> 00, 00

t1 -> 99, 99

t2 -> 99, 99

t3 -> 99, 33

t4 -> 99, 44

t5 -> 99,55

t6 -> 66,66

大概是这么几种情况。

Makefile中把export bb=99注释掉,打开bb=99,运行结果又会有些差别(其中t5差别最大);

两行都注释掉,又会有差别,这些就个人自行去动手体会吧。

 

最后,各位根据自己的情况去结合使用吧。

(转载请注明出处)

Logo

更多推荐