gpt4 book ai didi

c++ - 我可以让我的 Makefile 自动让 GCC 使用它支持的最新标准吗?

转载 作者:太空狗 更新时间:2023-10-29 20:36:28 26 4
gpt4 key购买 nike

我的 C++03 项目需要升级到 C++11,我可以保证至少在我想使用的所有 GCC 中都会提供对它的实验性支持。

但是,这可能是 -std=c++0x 或者它可能是来自较新 GCC 的实际 -std=c++11。总有一天它会是 -std=c++14(当 CentOS catch ......)。

我如何构建一个 GNU Makefile,根据哪个会成功,将“最佳”标志添加到 CXXFLAGS

可以只是说“好吧,我最早使用的 GCC 仍然没有生产就绪的 C++11 支持,所以我应该坚持使用 C++03”,但是嗯。

最佳答案

这将选择 $(CXX) 编译器支持的最佳选项:

CXX_MODE.42 := -std=c++98
CXX_MODE.43 := $(CXX_MODE.42)
CXX_MODE.44 := $(CXX_MODE.43)
CXX_MODE.45 := $(CXX_MODE.44)
CXX_MODE.46 := -std=c++0x
# Unnecessary, since -std=c++0x still works, but hey why not:
CXX_MODE.47 := -std=c++11
CXX_MODE.48 := $(CXX_MODE.47)
CXX_MODE.49 := $(CXX_MODE.48)
CXX_MODE.5 := -std=c++14
CXX_MODE.6 := $(CXX_MODE.5)
GXX_VERSION := $(shell $(CXX) -dumpversion | awk -F. '$$1<5{print $$1$$2} $$1>=5{print $$1}')
CXX_MODE := $(CXX_MODE.$(GXX_VERSION))
CXXFLAGS += $(CXX_MODE)

为了获得更多乐趣,您可以根据其他一些变量在 c++gnu++ 模式之间进行选择:

CXX_MODE.42 := 98
CXX_MODE.43 := $(CXX_MODE.42)
CXX_MODE.44 := $(CXX_MODE.43)
CXX_MODE.45 := $(CXX_MODE.44)
CXX_MODE.46 := 0x
# Unnecessary, since -std=c++0x still works, but hey why not:
CXX_MODE.47 := 11
CXX_MODE.48 := $(CXX_MODE.47)
CXX_MODE.49 := $(CXX_MODE.48)
CXX_MODE.5 := 14
CXX_MODE.6 := $(CXX_MODE.5)
GXX_VERSION := $(shell $(CXX) -dumpversion | awk -F. '$$1<5{print $$1$$2} $$1>=5{print $$1}')
CXX_MODE := $(CXX_MODE.$(GXX_VERSION))
ifneq($(STRICT),)
CXXFLAGS += -std=c++$(CXX_MODE) -pedantic -pedantic-errors
else
CXXFLAGS += -std=gnu++$(CXX_MODE)
endif

关于c++ - 我可以让我的 Makefile 自动让 GCC 使用它支持的最新标准吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38329519/

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