Установить макрос отладки условно с помощью make - PullRequest
1 голос
/ 17 сентября 2009

В моем проекте на C ++ есть соглашение, согласно которому всякий раз, когда определяется макрос DEBUG, отладочные операторы printf-esque компилируются в исполняемый файл.

Чтобы указать, хочу ли я, чтобы они были скомпилированы в исполняемый файл, я обычно передаю имя макроса в gcc с опцией -D macro . Итак, в Makefile у меня (в данный момент) есть:

CXXFLAGS += -g -I ../ -Wall -Werror -DDEBUG

Однако это не очень гибко; если бы я не хотел отладочных операторов в моей последней программе, мне пришлось бы изменить Makefile, чтобы удалить -DDEBUG.

Есть ли способ изменить Makefile так, чтобы я мог условно выбрать, компилировать ли с -D в CXXFLAGS во время компиляции, передав, скажем, другое имя цели или параметр командной строки? Не уверен, как мне это сделать.

Ответы [ 4 ]

4 голосов
/ 17 сентября 2009

Вы можете условно определить другие переменные на основе цели в make-файле.

all:    target
debug:  target

debug:  DEBUG=PLOP

target:
        @echo "HI $(DEBUG)"

Так что теперь:

> make
HI
>
> make debug
HI PLOP
>
2 голосов
/ 17 сентября 2009

Добавить другую переменную, которую вы можете установить из CLI или среды

$ cat Makefile
CXXFLAGS += $(CLIFLAGS)

maintarget:
    echo $(CXXFLAGS)
$ make CLIFLAGS=-DDEBUG
echo -DDEBUG
-DDEBUG
$ 
1 голос
/ 17 сентября 2009
0 голосов
/ 17 сентября 2009

После размышления над документациями о создании я попытался вставить это в свой Makefile:

ifneq(,$(findstring d,$(MAKEFLAGS)))
CXXFLAGS += <... all normal options ...> -DDEBUG
else
CXXFLAGS += <... all normal options ...>
endif

Затем при запуске make -d устанавливается -DDEBUG.

Теперь, обратите внимание, это работает, но мне пришлось использовать обычный флаг, который обычно принимает make (вы не можете создать свой собственный). Использование -d также выводит на экран (безвредные) подробные отладочные операторы make-level. Который я действительно не хочу; это скрывает ошибки компиляции. Но это работает.

Я надеюсь, что кто-то может предложить лучшую идею.

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