我想创建shell别名,它总是使用gcc
/ g++
/ clang
/ {{1}支持的C / C ++标准的“最新”版本(C的一个别名,C ++的一个别名)。我意识到这可能有多种解释:
....但是出于这些shell别名的目的,我并不在乎使用哪个“移动”值,只要我知道上述哪些规则用于确定使用哪种标准模式。
两个编译器是否都包含跟踪移动“最新标准”的参数别名?在GCC文档中我没有看到任何提及别名选项(虽然我的google-fu可能只是让我失望);同时,Clang用户手册提到“C支持的模式是[显式std模式......]和这些模式的各种别名”,但我没有看到别名本身的记录位置。
答案 0 :(得分:1)
您提及的任何编译器都没有这样的选项。
但是,为沙盒创建一个包含适当设置的简单Makefile很容易。我使用这样的东西:
CFLAGS = -Wall -std=c11 -D_XOPEN_SOURCE_=700
CXXFLAGS = -Wall -std=c++14 -D_XOPEN_SOURCE_=700
默认构建规则完成了我的其余需求,因此不需要使用所有源文件的名称和依赖项填写makefile,前提是我总是将单文件可执行文件沙箱化。
有了这个,我可以输入make foo
来编译foo.c
或foo.cc
。 (或make foo.o
如果我不想要链接。)功能测试宏设置使我不得不记得在我的源文件中也这样做。
使用非默认编译器进行编译:{{1}}。打字的次数仍然少于make foo CXX=clang++
(实际上我使用的那个比它更复杂。它包括clang++ -Wall -o foo foo.cc
的后缀规则和一些变量以简化设置优化和调试选项。但原理是相同的。)
答案 1 :(得分:0)
最简单的解决方案是什么都不做,或者更具体地说是避免使用-std=
。
一旦开发人员对其标准版本的实施充满信心,编译器本身就会在发布版本时提升默认模式。这符合您的标准:
编译器完全实现的最新标准(例如C ++ 11 for GCC 4.9,C ++ 14 for GCC 5 +)
虽然它也增加了成熟度。