make-файлы CFLAGS

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

20
задан savanto 30 May 2014 в 23:20
поделиться

6 ответов

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

Так эти -DPACKET_LINK эквивалент помещения #define PACKET_LINK 1 наверху всего.c и.h файлов в Вашем проекте. Скорее всего, у Вас есть код в Вашем проекте, который смотрит, если они макросы определяются, и делает что-то в зависимости от этого:

#ifdef PACKET_LINK
// This code will be ignored if PACKET_LINK is not defined
do_packet_link_stuff();
#endif

#ifdef LOW_POWER
// This code will be ignored if LOW_POWER is not defined    
handle_powersaving_functions();
#endif

, Если Вы смотрите далее вниз в Вашем make-файле, необходимо видеть, что $(CFLAGS), вероятно, используется как:

$(CC) $(CFLAGS) ...some-more-arguments...
24
ответ дан 30 November 2019 в 00:09
поделиться

Где-нибудь в make-файле CFLAG будет использоваться в строке компиляции как это:
$(CC) $(CFLAGS) $(C_INCLUDES) $<

и в конечном счете в выполнении будет переведен в:

gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o

Это определяет, будет передан исходному коду, как это было, определяют в заголовочном файле

8
ответ дан 30 November 2019 в 00:09
поделиться

-D обозначает , определяют (в gcc), по крайней мере, который позволяет Вам #define на командной строке вместо файла где-нибудь. Общей вещью видеть был бы-DDEBUG или-DNDEBUG, которые соответственно активируют или отключают отладку кода.

1
ответ дан 30 November 2019 в 00:09
поделиться

-D опция установила переменные препроцессора, таким образом, в Вашем случае, весь код, который находится в указанном "#ifdef / #endif" блоки, будет скомпилирован.

Т.е.

#ifdef PACKET_LINK
/* whatever code here */
#endif

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

, Например,

gcc $(CFLAGS) source.c
2
ответ дан 30 November 2019 в 00:09
поделиться

Только для полноты в этом - при использовании nmake утилиты Microsoft Вы не могли бы на самом деле видеть $ (CFLAGS) макрос, используемый в make-файле, потому что nmake имеет некоторые значения по умолчанию для вещей как компиляция файлов C/C++. Среди других следующее предопределено в nmake (я не уверен, делает ли GNU, делает что-либо как это), таким образом, Вы не могли бы видеть его в рабочем make-файле в Windows:

.c.exe:
    commands:          $(CC) $(CFLAGS) $<

.c.obj:
    commands:          $(CC) $(CFLAGS) /c $<

.cpp.exe:
    commands:          $(CXX) $(CXXFLAGS) $<

.cpp.obj:
    commands:          $(CXX) $(CXXFLAGS) /c $<
1
ответ дан 30 November 2019 в 00:09
поделиться

Я нашел, что Просят, чтобы г-н Make был большой ссылкой для подсказок по Make-файлу

http://www.cmcrossroads.com/content/category/8/147/268/

0
ответ дан 30 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

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