Я изучаю курс 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’
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.
То, что необходимо сделать, связано с программами gcc и ld. Переменные среды C_INCLUDE_PATH и LD_LIBRARY_PATH являются местами для поиска заголовков и библиотек соответственно. gcc опции-l и-L полезны, обычно объявить что-то как
БИБЛИОТЕКИ =-lcs
LIBDIR =-L/usr/local/lib
Тогда использование эти делать-переменные в командах, выполненных каждым правилом. Если Вы установили эти библиотеки, использующие склонный - добираются могут быть доступные данные конфигурации пакета, посмотрите, что команда pkg-конфигурируется
Вы 'ре делаете правило, должен считать что-то вроде этого,
привет: hello.c
gcc -ohello hello.c -g -lcs50 -lm
Теперь просто вводит команду
, делают привет
Я не думаю, что это решает Вашу проблему, но отвечать на вопрос, как указано:
Существуют некоторые способы установить опции по умолчанию для 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
) переопределять.