有没有办法告诉gcc在编译c文件时使用c99标准作为默认值?
我想避免一直给它-std=c99
参数。
我假设我可以通过在.bashrc文件中创建一个别名来做到这一点,但似乎相当不优雅。
答案 0 :(得分:5)
您可以拨打c99
而不是gcc
(gcc的包装,如果您的系统上可用)或尝试修改您的gcc spec文件。更多信息请访问:http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Spec-Files.html
答案 1 :(得分:2)
这是一个意想不到的答案。使用Makefile!
优点:
make
即可构建缺点:
考虑这个来源:
#include <stdio.h>
int main() {
printf("Hello!\n");
int x = 4;
printf("%d\n", x);
return 0;
}
你可以像这样制作一个Makefile:
(免责声明,我实际上并不知道如何写它们)
CC=gcc
CFLAGS=-Wall -pedantic -std=c99
LDFLAGS=
SOURCES=$(wildcard *.c)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
.PHONY: clean
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f *.o $(EXECUTABLE)
它为我构建。
同样,如果您删除-std=c99
,则它不应该是有效的C89代码,实际上,输入make
会显示构建错误。
答案 2 :(得分:1)
自定义编译表明您具备编译器,标准和基本标志/选项的应用知识。因此,我建议您在.bashrc
,.tcshrc
等中设置shell变量,并在命令行中使用它们。
由于方言的选择会对链接产生影响:CC="gcc -std=c99"
,因此允许您使用$CC -c -O2 ... foo.c
调用单独的编译命令,并且还将其作为configure
脚本的默认选项,当然,您始终可以使用configure
或CC="gcc -std=c90"
覆盖CC="clang"
脚本。这同样适用于首选CFLAGS
值,例如
CFLAGS="-pipe -W -Wall -O2 -march=core2"
允许$CC $CFLAGS -c foo.c
命令,默认情况下,两个环境变量都使用配置脚本,除非您明确覆盖它们。我认为这比别名更有用。但也许我已经习惯了自己的设置:)