2015-01-29 3 views
-3

Я хочу провести некоторое тестирование и хочу, чтобы входной файл передавался непосредственно компилятору c, а не был предварительно запрограммирован. Как я могу это сделать? Благодаря!Как сделать предварительную обработку gcc skip?

+0

Я не думаю, что есть способ сделать это в 'совместимый компилятор C'. –

+2

Вы можете посмотреть, есть ли способ заменить команду do-nothing для препроцессора. Номинально это похоже на 'cat', за исключением того, что вам нужно игнорировать большинство опций, которые он передал. Это будет нелегко. Это также удивительно. Если код собирается компилироваться, несмотря на то, что он не выполняется через препроцессор, это должно означать, что препроцессор ничего не сделает, поэтому не имеет значения, действительно ли используется препроцессор. –

+1

Опция '-fpreprocessed' сообщает компилятору * gcc *, что входной файл уже предварительно обработан. Это подавляет большую часть задачи предварительной обработки. –

ответ

1

Если исходный файл, который вы не хотите предварительно обрабатывать, является исходным файлом C foo.c, а затем переименуйте его в foo.i. Если это исходный файл C++, то переименуйте его в foo.ii. Это заставит компилятор пропустить предварительную обработку. Просто скомпилируйте, как обычно, например.

gcc -c -o foo.o foo.i 

Однако, если вы пытаетесь скомпилировать исходный файл, содержащие директивы предварительной обработки («#» - линия) без предварительной обработки его затем компиляция будет просто не в состоянии, как:

$ cat foo.c 
#include <stdio.h> 

int main() 
{ 
    puts("Hello world"); 
    return 0; 
} 

$ cp foo.c foo.i 
$ gcc -c -o foo.o foo.i 
foo.i:1:1: error: stray ‘#’ in program 
#include <stdio.h> 
^ 
foo.i:1:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token 
#include <stdio.h> 
    ^

Возможно, что вы хотите сделать, это скомпилировать исходный файл, который вы уже предварительно обработали без , предварительно обработав его. В этом случае, первый предобработки foo.c, писать вывод в foo.i, затем скомпилировать foo.i:

$ cpp foo.c > foo.i 
$ gcc -c -o foo.o foo.i 
$ gcc -o foo foo.o 
$ ./foo 
Hello world 

Предположительно вы могли бы сделать что-то с, или, foo.i между его создания и компиляции; иначе вы могли бы просто скомпилировать foo.c.

gcc in my machine is a symbolic link to clang

OS X? Не важно: вы можете заменить clang на gcc на все вышеперечисленное.

See also

Смежные вопросы