首页 文章

是否可以在Makefile中“取消设置”环境变量?

提问于
浏览
19

我正在使用GNU make,并且在项目中包含第三方库,如果在调用环境时在环境中定义了 CFLAGS ,则构建系统会变得狂暴 . 由于其他原因,我喜欢在我的环境中定义 CFLAGS . 从另一个makefile调用库的构建,所以我说例如:

第3方: $(MAKE) -f Makefile.3rdparty

但我想确保当我在第三方Makefile上调用make时 CFLAGS 未设置 . 我能找到的最近的事情就是说:

CFLAGS:=

但是这仍然在环境中设置 CFLAGS ,它只是一个空字符串 . 除了做一些可怕的事情,比如说:

第三方: bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"

是否有一种简单的方法可以在我的主要makefile中使用 CFLAGS 变量,以便在调用第三方库时环境中根本不存在它?

4 回答

  • 25

    以下不适合您吗?

    unexport CFLAGS
    3rdparty:
            $(MAKE) -f Makefile.3rdparty
    
  • 1

    从版本3.82开始,make有一个“undefine”指令:

    undefine CFLAGS
    
  • 0

    如果您需要为配方中的其他命令定义变量并且仅希望在子制动中定义变量,则可能会出现问题 . 另一个解决方案是使用env - 来调用submake并显式设置你需要在submake中设置的任何环境变量,例如:

    env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty
    
  • -3

    在linux中取消设置环境变量 .

    使用:

    export -n MY_ENV_VARIABLE
    

相关问题