Как я могу определить #define в моих файлах Make - PullRequest
11 голосов
/ 26 января 2010

В моих файлах c / c ++ есть несколько #define. Как пример:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more code */

Подскажите, пожалуйста, как я могу изменить свой Makefile.in, чтобы во время компиляции эти файлы #define содержались в ALL ? *

Спасибо.

Ответы [ 3 ]

17 голосов
/ 26 января 2010
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

Вы можете передать их в CPPFLAGS,

CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

или создайте новую переменную

CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG

и передайте его CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

Те, наконец, перейдут к gcc/g++ -D...

$(CC) $(CPPFLAGS)
3 голосов
/ 26 января 2010

Добавьте строку ниже в ваш make-файл:

DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG
...
... further on in your makefile on the line where it says ....
...
    $(cc) ($(addprefix -D, $(DEFINES))) .....
...
...

Это служит в качестве примера, вы только добавляете другое определение к переменной DEFINES, которая ссылается на строку, как показано $(cc) -D$(DEFINES), в которой make автоматически расширит переменную и скомпилирует те, которые #ifdef д.

Спасибо R Самуилу Клатчко за указание на небольшую ошибку ... это специально для GNU, вы можете использовать addprefix, сделайте это правильно ($ ( addprefix -D, $ (DEFINES))) .

0 голосов
/ 03 февраля 2010

Не изменяйте свой Makefile.in. (и подумайте об использовании Automake и преобразовании вашего Makefile.in в гораздо более простой Makefile.am). Весь смысл этих #defines состоит в том, чтобы позволить скрипту configure определять их в config.h, а ваши исходные файлы должны #include . Если вы поддерживаете пакет, вам нужно будет написать тесты в файле configure.ac, чтобы определить, установлена ​​ли на используемой системе libvncserver с поддержкой jpeg и zlib. Если вы модифицируете Makefile.in, чтобы всегда определять их, то вы предполагаете, что ваш код создается только на тех компьютерах, где эти функции доступны. Если вы сделаете это предположение, вам все равно следует добавить проверки в configure.ac для его подтверждения и дать сбой сценарию configure, если зависимости не будут выполнены.

...