Подтвердить что ты не робот

Передача C/С++ #defines в makefile

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

Я хочу использовать этот makefile для ночной сборки внутри Hudson.

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

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

4b9b3361

Ответ 1

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

make CPPFLAGS=-DFOO

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

Ответ 2

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

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

Ответ 3

Для использования GCC -D define.

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

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

Ответ 4

Если вы используете autotools, другие параметры состоят в том, чтобы иметь 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/С++ Build- > Builder Settings) и установите для параметра "Построение Location- > Build Directory"

${workspace_loc:/helloworld/bin/debug}

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

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