25

我正在使用 GNU make,并在一个项目中包含一个 3rd 方库,该项目具有一个构建系统,如果CFLAGS在调用它时在环境中定义它,它就会发疯。CFLAGS出于其他原因,我喜欢在我的环境中进行定义。库的构建是从另一个 makefile 调用的,所以我说例如:

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

但是我想确保CFLAGS在第 3 方 Makefile 上调用 make 时未设置。我能找到的最接近的事情是:

CFLAGS:=

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

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

有没有一种简单的方法可以CFLAGS从我的主生成文件中“取消设置”变量,以便在调用第三方库时它根本不存在于环境中?

4

4 回答 4

30

以下内容不适合您吗?

unexport CFLAGS
3rdparty:
        $(MAKE) -f Makefile.3rdparty
于 2010-02-02T22:46:54.347 回答
3

从 3.82 版开始,make 有一个“未定义”指令:

undefine CFLAGS 
于 2018-02-21T00:37:54.207 回答
1

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

env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty
于 2014-06-26T11:32:51.500 回答
-6

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

利用:

export -n MY_ENV_VARIABLE
于 2014-08-27T12:00:25.907 回答