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

С Eclipse: как добавить include paths и библиотеки для всего вашего проекта C/С++

Можно ли добавлять включенные пути и библиотеки ко всем проектам C/С++? В других словах: Как я могу сделать их глобальными или скопировать один проект сборки проекта C/С++ в другой?

4b9b3361

Ответ 1

Для Eclipse Indigo: Нет возможности определять глобальные пути и библиотеки. Но вы можете экспортировать и импортировать их из одного проекта в другой.

Перейдите в Проект > Свойствa > Общие сведения о C/С++ > Пути и символы Затем нажмите Настройки экспорта..., чтобы сохранить пути включения и/или определения символов в файл. В другом проекте вы можете использовать Параметры импорта...

Ответ 2

Да, вы можете в 2 шага более удобны для пользователя, как указано в parvus. Оба выполняются в "Свойства проекта" → "C/С++ General" → "Пути и символы":

  • В существующем проекте, в котором вы уже настроили пути include: выделите пути включения (на вкладке "Включает" ), которые вы хотите скопировать в новый проект, и выберите "Экспорт". Обратите внимание, что это добавляет тег [Exp] в каждую строку.
  • В новом созданном проекте: На вкладке "Ссылки" установите флажок только что упомянутого проекта, и когда вы вернетесь на вкладку "Включает", вы увидите, что все пути, которые вы только что экспортировали, появляются там.

Обращение к библиотекам работает одинаково.

Также посмотрите:

Ответ 3

Я часто использую переменную среды CPATH для включения разных каталогов во все мои проекты. Он найден в среде c/С++ → build- > . Не забудьте разделить каждый путь с символом ':' (а не с точкой с запятой).

Вы также можете использовать PATH для включения статических библиотек. Однако для меня он работал только надежно в Linux. В OSX это руины делают.

Альтернативой было бы добавить эти библиотеки и заголовки в пути поиска по умолчанию в окружении; место любит /usr/local/lib. Прочитайте, где ваш линкер выполняет поиск по умолчанию.

Ответ 4

Для библиотек я делаю следующее в исходном проекте:

Project → properties → c/С++ Build → С++ linker → libraries

После этого я выбираю библиотеки (shift + mouse) и копирует (ctrl + c)

В пустом проекте:

Project → properties → c/С++ Build → С++ linker → libraries

ctrl + v (paste)

Прекрасно работает с eclipse juno

Ответ 5

Я просто копирую один проект из использования eclipse, встроенного в Project explorer. После этого просто переименуйте исходные файлы.

Ответ 6

Я изучаю его давно. В нескольких сообщениях упоминается один метод: Project > Properties > C/С++ General > Пути и символы Затем нажмите "Экспорт настроек". Но он работает только для включения файлов заголовков.

Чтобы указать библиотеки и пути к библиотеке, насколько я знаю, я не нашел простого решения. Например, теперь я использую библиотеки ffmpeg. Если вы используете "Makefile", файлы включения и библиотеки могут быть указаны ниже:

FFMPEG_LIBS = libavdevice
                libavformat
                libavfilter
                кодеком
                libswresample
                libswscale
                libavutil
CFLAGS: = $(shell pkg-config --cflags $(FFMPEG_LIBS)) $(CFLAGS) LDLIBS: = $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS)

Здесь много файлов. Если я включу их один за другим в проекте Eclipse С++, это сложно. Я не знаю, почему в Eclipse нет опции, чтобы мы могли включать файлы библиотеки, используя прошлую длинную линию; в качестве разделителя, например:

-lavdevice -lavfilter -lswresample -lswscale -lavformat -lavcodec -ldl -lasound -lSDL -lz -lrt -lavutil -lm

Есть ли такой способ, или я должен набирать файлы библиотеки один за другим или использовать Makefile?

Ответ 7

Я столкнулся с той же проблемой и решил ее так: Я видел, что в автогенерированном make файле есть строки:

-include ../makefile.init
 ...
-include ../makefile.defs
 ...
-include ../makefile.targets

после чтения Как я могу параметризовать созданный файл создания Eclipse Я понял, что вы можете определить переменные за пределами вашего проекта. Это означает, что это может быть общая переменная для нескольких проектов. Поэтому я добавил файл makefile.defs вне проекта и объявил в нем некоторые переменные:

MY_INCLUDE = <path to include>...
MY_LIBS_PATH = <path to libs>...
MY_LIBS = -lmylib ... (the libs)

чем во всех моих проектах "properties- > c/С++ build- > build variables" Я определил новую переменную:

my_include = $(MY_INCLUDE)
my_libs_path = $(MYLIBS_PATH)
my_libs = $(MY_LIBS)

И чем вы можете использовать эти переменные в проектах. Перейдите в properties- > c/С++ build- > Настройки и выберите компилятор и добавьте $(my_include). Перейдите в компоновщик и выберите "Библиотеки" и добавьте путь поиска $(my_libs_path). По какой-то причине библиотеки (-l) не могут взять мою определенную переменную env, поэтому я обойду ее, выбирая компоновщик, а затем перейдите в раздел "Разное" и добавьте флаги компоновщика $(my_libs). Наконец, вам нужно изменить порядок в командной строке (когда выполняется компоновщик), потому что список libs должен появиться после файлов .o. Поэтому для этого перейдите к компоновщику и вкладке, и там вы увидите финальную командную строку, которая будет выполнена. В "шаблоне командной строки параметров эксперта" вы перемещаете ${FLAGS} в конец командной строки (который перемещает строку $(my_libs), которая находится в задней части командной строки). ВСЕ ЭТО. его много, но вам нужно сделать это только один раз... надеюсь, что это поможет кому-то...

Ответ 8

Полуавтоматически это можно сделать, используя этот perl script:

#!/usr/bin/perl

# pipe the (gcc) compile command into this script
# It emits listOptionValue lines to paste into .cproject
#
# To easily find the paste location, set the include path as usual to a string 
# that is easily recognizable in the .cproject, e.g. to "MARKER_INCLUDE_PATH".
#
# Make sure eclipse is not running while you do these sorts of hacks and backup 
# your .cproject before.
# -----------------------------------------------------------------------------------------
# sample line: <listOptionValue builtIn="false" value="/usr/include/gdk-pixbuf-2.0"/>

while (<>) {
    @include_options = m#-I *(.*?) #g;
    print join ("\n", @include_options) . "\n";
    print join ('"/>' ."\n" . '                                 <listOptionValue builtIn="false" value="', @include_options);
    print '"/>' . "\n";
}