Передача C / C ++ # определений в makefile - PullRequest
31 голосов
/ 11 января 2010

Я разрабатываю C / C ++, используя Eclipse IDE. Eclipse также генерирует make-файл, который я не хочу редактировать, так как он будет просто перезаписан.

Я хочу использовать этот make-файл для ночной сборки в Гудзоне.

Как передать #defines, сделанные в файле проекта среды IDE, в make-файл? (и почему Eclipse уже не включает их в сгенерированный make-файл?)

Я действительно однажды понял это, а потом случайно переписал :-( Но по крайней мере я знаю, что это можно сделать ...

Ответы [ 4 ]

29 голосов
/ 21 января 2010

Если вы запускаете make из командной строки, используйте

make CPPFLAGS=-DFOO

, который добавит -DFOO ко всем компиляциям. См. Также CFLAGS, CXXFLAGS, LDFLAGS в руководстве по изготовлению.

2 голосов
/ 11 января 2010

Вы можете написать небольшую программу для включения заголовков и записать фрагмент make-файла, который вы include включите в основной make-файл (требуется GNU make)

Это довольно уродливое решение, требующее изрядного количества ручного взлома. Более элегантно было бы разобрать файл проекта и записать фрагмент make-файла.

1 голос
/ 24 декабря 2011

Если вы используете автоинструмент, другой вариант - иметь 2 каталога: bin / debug и bin / release.

# Simple bootstrap script.

# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"

Настройка Eclipse. Откройте свойства проекта (Project-> Properties-> C / C ++ Build-> Builder Settings) и установите Build Location-> Build Directory на

${workspace_loc:/helloworld/bin/debug}

Замена 'helloworld' на каталог вашего проекта относительно рабочей области (или вы можете указать абсолютный путь $ {/ abs / path / debug}). Сделайте то же самое с конфигурацией выпуска, заменив «/ debug» на «выпуск» в конце пути.

Этот метод кажется пустой тратой дискового пространства, но верной альтернативой для достижения совершенно отдельных сборок.

1 голос
/ 11 января 2010

Для GCC использовать -D определить.

OP прокомментировал ниже, что он хочет передать определение в make и передать его в GCC.

Make не позволяет этого. Обычно вы просто добавляете другое правило make для добавления определений. Например, «make release» против «make debug». Как создатель makefile, вы создаете два правила и имеете определения прямо в файле make. Теперь, если Eclipse не помещает определения в make-файл, я бы сказал, что Eclipse не работает.

...