скомпилировать с -ansi -pedantic -Wall автоматически переключается с помощью gcc - PullRequest
3 голосов
/ 22 мая 2010

Мы должны скомпилировать исходные коды C, используя gcc следующим образом:

gcc -ansi -pedantic -Wall program.c

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

gcc program.c

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

Ответы [ 5 ]

9 голосов
/ 22 мая 2010

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

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

Например, для этого make-файла:

# 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

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

8 голосов
/ 22 мая 2010

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

Когда у вас есть make-файл, вам просто нужно набрать: make

3 голосов
/ 22 мая 2010
alias gcc="gcc -ansi -pedantic -Wall"

Но, как сказал @Brian, вам действительно следует использовать make-файл или, что лучше, систему сборки, такую ​​как CMake или SCons .

2 голосов
/ 22 мая 2010

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

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

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

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

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

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

pedantic foo

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

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

2 голосов
/ 22 мая 2010

Makefile будет традиционным способом, особенно в рамках более крупного процесса сборки.

Если вы часто хотите собирать без make-файла, вы можете определить псевдоним в вашем .bashrc или эквивалентном:1004 *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...