gpt4 book ai didi

c++ - 如果设置了标志,GNU 如何理解?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:17 25 4
gpt4 key购买 nike

我正在使用 makefile 开发一个 C++ 项目。我必须对其进行一些修改,但在此之前,我对 GNU make 中标志的解释方式有疑问。为了详细说明,在以下代码片段中,我有两个选项可以在项目编译期间启用或禁用功能,

    # Two options for a feature:
FEATURE=on off

# other lines in the make file

# By default, the feature is turned off
ifndef FEATURE
FEATURE = off
endif

# other lines in the make file

# A number of other flags are defined here

# I have defined a flag to indicate that my feature is disabled
CXXFLAGS_off = -DFEATURE_DISABLED

# Adding all the flags
CXXFLAGS += $(CXXFLAGS_$(FEATURE)) #Other flags also added

现在,在我的代码中的某处,我有这一行:

    #ifdef FEATURE_DISABLED
//Don't invoke the functions for the feature
#else
//Invoke the functions for the feature
#endif

现在在编译期间,当我说 make FEATURE = on 时,我看到程序运行良好,启用了该功能。当我说 make FEATURE = off 时,它被禁用。

然而,我的问题是我并不完全理解编译器是如何解释我的选择的。例如,我只是说“make FEATURE = off”,这一行如何映射到启用 off 标志的事实以及如何在关闭该功能的情况下编译代码?正如我上面所写,我确实将我的功能的标志添加到 CXXFLAGS,但是如何理解 FEATURE = off 意味着设置了 FEATURE_DISABLED 标志?

非常感谢您的任何解释。

最佳答案

因为你写了

CXXFLAGS += $(CXXFLAGS_$(FEATURE))

当您在 make 命令行上提供 FEATURE = off 时,它将扩展为

CXXFLAGS += $(CXXFLAGS_off)

因为你也定义了

CXXFLAGS_off = -DFEATURE_DISABLED

依次扩展为

CXXFLAGS += -DFEATURE_DISABLED

这意味着编译器将以 -DFEATURE_DISABLED 作为额外参数运行。

关于c++ - 如果设置了标志,GNU 如何理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com