2010-05-22 4 views
3

Мы должны компилировать исходные коды C помощью GCC таким образом:компилировать с -ansi -pedantic -Wall автоматически переключается с НКУ

gcc -ansi -pedantic -Wall program.c 

мне интересно, как я могу «автоматизировать» это так, когда я введите:

gcc program.c 

Он будет автоматически скомпилирован с тремя переключателями. Это возможно?

ответ

8

Чтобы автоматизировать сборку любого количества шагов сборки/сложных параметров, вы должны использовать makefile.

После того, как у вас есть Makefile вам просто нужно ввести: make

+2

Продвинутый вариант для предложения жестко закодированного (и сломанного) Makefile, когда неявные правила с 'export CFLAGS = ...' в среде делают именно то, что хочет Jef Ty. (См. Ответ Скотта Уэйлса). –

+0

@Matt B: целью make-файла было просто представить концепцию make-файла, предоставив самый простой возможный пример, который будет работать, набрав make. Без использования неявных правил. Однако я удалил этот пример. Очень возможно, что OP захочет сделать что-то более сложное со своим make-файлом, если не сегодня, то скоро. –

3
alias gcc="gcc -ansi -pedantic -Wall" 

Но, как сказал @ Брайан, вы действительно должны использовать Makefile, или лучше, систему сборки, как CMake или SCons.

+3

Я бы назвал это чем-то, кроме 'gcc', так что, если бы я когда-либо хотел использовать его в не сумасшедшем режиме, я все равно мог бы называть' gcc'. – nategoose

+0

@nategoose: Если вы хотите вызвать «plain» gcc без вызова псевдонима, вы должны поставить обратную косую черту перед командой \ gcc, чтобы предотвратить замену псевдонимов. – dadinck

2

Файл makefile будет традиционным способом, особенно как часть более крупного процесса сборки.

Если вы часто хотите создать без make-файла, вы можете определить псевдоним в своем .bashrc или его эквиваленте: alias gcc=gcc -ansi -pedantic -Wall.

9

Вы также можете использовать неявные правила make, чтобы вам не приходилось писать make-файл для каждой программы. Make будет автоматически вызывать компилятор, если вы скажете make foo, и в текущем каталоге существует файл foo.c. Чтобы добавить флаги для этого, определите переменную CFLAGS в вашей среде, например. в bash добавить export CFLAGS="-Wall -pedantic -ansi" в .bashrc.

Если ваша программа зависит от нескольких файлов, вам нужно будет создать make-файл, но для компиляции C вы можете избежать просто перечисления зависимостей, если одно из них имеет то же базовое имя, что и цель.

Например, для этого Makefile:

# Makefile 
foo:foo.o bar.o 

работает make будет выполнять команды

gcc $CFLAGS -c -o foo.o foo.c 
gcc $CFLAGS -c -o bar.o bar.c 
gcc -o foo foo.o bar.o 

без необходимости добавления каких-либо правил.

2

Вы можете использовать скрипт оболочки, который принимает некоторые подсказки, как его вызвал и вызывает make после установки CFLAGS соответственно для случайной одноразовой сборки.

Допустим, у вас есть /usr/bin/compile, который представляет собой скрипт оболочки, который смотрит на $0, чтобы узнать, какое имя фактически вызвало его. Затем сделать символические ссылки на него с именем pedantic, fullwarn и т.д.

В самом сценарии оболочки, что-то вроде:

OLDCFLAGS=$CFLAGS 
WHATAMI=$(basename $0) 

case "$WHATAMI" in 
    pedantic) 
     export CFLAGS="-Wall -pedantic -ansi" 
     make [email protected] 
     exit $? 
    ;; 
    c99) 
     export CFLAGS="-std=c99 ... ... ..." 
     .... 

Затем, чтобы скомпилировать Foo.с с дополнительными сварливыми флагами:

pedantic foo

Это удобно, так как я сказал на одноразовый строит, например, при попытке скомпилировать код, который кто-то разместил в вопросе, или работать, как использовать новую библиотеку и т. д.

Для чего-либо еще, просто используйте make-файл, как говорили другие.

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