makefile CFLAGS игнорировать $ (mysql_config --libs)? - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю пример игрушечного make-файла для проверки mysql, но make-файл не распознает mysql_config. это скрипт makefile:

CFLAGS = -g -O2  -Wall -Wextra -Isrc -rdynamic $(OPTFLAGS)
LDLIBS = $(OPTLIBS)
SOURCES =$(wildcard *.c)
OBJECTS = asd
all: LDLIBS += $(mysql_config --libs_r) -lm
     CFLAGS += -Isrc $(mysql_config --cflags)
all: $(OBJECTS)

Когда я запускаю make all, он только выполняет:

cc -g -O2  -Wall -Wextra -Isrc -rdynamic  -Isrc     asd.c   -lm -o asd

Откуда все mysql CFLAGS и LDLIBS go? Или что-то не так с моим сценарием?

возвращается, когда я набираю 'mysql_config --cflags' в оболочке, для демонстрации:

-I/usr/include/mysql

1 Ответ

1 голос
/ 11 февраля 2020

Содержимое $(mysql_config --libs_r) предназначено для того, чтобы попросить shell вызвать эту команду и заменить строку ее выводом.

Но, make использует $(...) синтаксис для расширения переменных. Итак, ваша попытка запустить команду оболочки mysql_config --libs_r фактически интерпретируется как расширение переменной make с именем mysql_config --libs_r, которой нет ни одной, и поэтому вы получаете пустую строку здесь.

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

Кроме того, ваши отступы означают, что вы хотите, чтобы и LDLIBS, и CFLAGS были целевыми c переменными для all цель, однако, если это действительно то, что вам нужно, вы должны использовать обратную косую черту sh в конце первой строки. Простой отступ строки не делает ее продолжением предыдущей строки.

Вы хотите это:

all: LDLIBS += $$(mysql_config --libs_r) -lm \
     CFLAGS += -Isrc $$(mysql_config --cflags)

С этим связаны некоторые проблемы с эффективностью, так как он будет работать mysql_config дважды для каждые операции компиляции и компоновки. Гораздо эффективнее было бы что-то вроде:

mysql_LIBS := $(shell mysql_config --libs_r)
mysql_FLAGS := $(shell mysql_config --cflags)

, тогда используйте переменные make $(mysql_LIBS) и $(mysql_FLAGS)

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