Изменение команды make по умолчанию [закрыто]

Я изучаю курс HarvardX: CS50x Introduction to Computer Science. Обычно для прохождения этого курса вам нужно использовать виртуальную машину для запуска системы Fedora, называемой устройством cs50, со всеми удобствами, но я уже использую Kubuntu, поэтому я загрузил clang и библиотеку cs50 и хочу изменить параметры по умолчанию of make для включения библиотеки и остановки при обнаружении ошибок в программе c, которую я пытаюсь скомпилировать. В устройстве команда make выполняет: clang -ggdb3 -00 -std = c99 -Wall -Werror -argv-2.c -lcs50 -lm -o argv-2 . Было бы неплохо, если бы вы могли объяснить, что нужно включить и почему. Когда я компилирую файл .c с помощью make, он не загружает библиотеку cs50, и я получаю: undefined function ...

Я попытался написать $ nano ~ / .bashrc . Затем перешел в конец файла и поместил

 #CS50 alias for C compiling:
 alias makec='gcc -ggdb3 -std=c99 -Wall -Werror -argv-2.c -lcs50 -lm -o -argv-2'

Затем $ source .bashrc

Когда я делаю $ makec hello , теперь он говорит:

gcc: error: hello: No such file or directory
gcc: error: unrecognized command line option ‘-argv-2.c’
1
задан 27 October 2014 в 11:23

4 ответа

export CC=gcc
export CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror"
export LDLIBS="-lcs50 -lm"

-ggdb

       Produce debugging information for use by GDB.  This means
       to use the most expressive format available (DWARF 2,
       stabs, or the native format if neither of those are
       supported), including GDB extensions if at all possible.

-ggdblevel

       Request debugging information and also use level to specify
       how much information.  The default level is 2.

       Level 3 includes extra information, such as all the macro
       definitions present in the program.  Some debuggers support
       macro expansion when you use -g3.

-O0

       Reduce compilation time and make debugging produce the
       expected results.  This is the default. (Is a optimization option)

- Стена

       Turns on all optional warnings which are desirable for
       normal code.  At present this is -Wcomment, -Wtrigraphs,
       -Wmultichar and a warning about integer promotion causing a
       change of sign in "#if" expressions.  Note that many of the
       preprocessor's warnings are on by default and have no
       options to control them.

-Werror

       Make all warnings into hard errors.  Source code which
       triggers warnings will be rejected.

-lm

       possibly loads a math library.
0
ответ дан 6 October 2019 в 12:16

То, что необходимо сделать, связано с программами gcc и ld. Переменные среды C_INCLUDE_PATH и LD_LIBRARY_PATH являются местами для поиска заголовков и библиотек соответственно. gcc опции-l и-L полезны, обычно объявить что-то как

БИБЛИОТЕКИ =-lcs

LIBDIR =-L/usr/local/lib

Тогда использование эти делать-переменные в командах, выполненных каждым правилом. Если Вы установили эти библиотеки, использующие склонный - добираются могут быть доступные данные конфигурации пакета, посмотрите, что команда pkg-конфигурируется

0
ответ дан 6 October 2019 в 12:16

Вы 'ре делаете правило, должен считать что-то вроде этого,

привет: hello.c

gcc -ohello hello.c -g -lcs50 -lm

Теперь просто вводит команду

, делают привет

0
ответ дан 6 October 2019 в 12:16

Я не думаю, что это решает Вашу проблему, но отвечать на вопрос, как указано:

Существуют некоторые способы установить опции по умолчанию для make:

  • Используя псевдоним оболочки, как

    alias make='make --foo=bar'
    

    в ~/.bashrc или подобный.

  • Установка переменной среды MAKEFLAGS содержать опции по умолчанию.

  • Используя переменную среды MAKEFLAGS добавить опцию по умолчанию -e (--environment-overrides), и определите другие переменные, относящиеся к make-файлам в ~/.bashrc, быть взятым make, расположенный по приоритетам по определениям в Makefile

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

Лучшее решение, кажется, для не изменения опций по умолчанию make,
но использовать отдельный псевдоним для выполнения делают в интерактивном режиме. Псевдоним может установить опции для рекурсивных вызовов make.

alias cs50make='make --foo=bar'

или

alias cs50make='MAKEFLAGS="..." make'

или даже

alias cs50make='MAKEFLAGS="-e ..." VAR1="..." VAR2="..." make'


Относительно создания make остановка на ошибках: Это должно обычно делать это по умолчанию, но если это где-нибудь установлено не остановиться, можно использовать опцию -S (--no-keep-going, --stop) переопределять.

0
ответ дан 6 October 2019 в 12:16

Другие вопросы по тегам:

Похожие вопросы: