使用Eclipse:如何为所有C / C ++项目添加包含路径和库

时间:2010-04-24 20:07:03

标签: c++ c eclipse eclipse-cdt

是否可以在所有C / C ++项目中添加包含路径和库?换句话说:如何将它们设为全局或将一个C / C ++项目构建设置复制到另一个?

8 个答案:

答案 0 :(得分:13)

对于Eclipse Indigo: 没有可能定义全局包含路径和库。 但是您可以将它们从一个项目导出并导入到另一个项目中。

转到项目>属性> C / C ++一般>路径和符号 然后单击导出设置... 以将包含路径和/或符号定义保存到文件中。在您的其他项目中,您可以使用导入设置...

答案 1 :(得分:9)

是的,您可以通过2个步骤,更加方便用户,就像parvus提到的那样。两者都在“项目属性”中完成 - > “C / C ++ General” - > “路径和符号”:

  1. 在已配置包含路径的现有项目中:突出显示要复制到新项目的包含路径(在“包含”选项卡中),然后选择“导出”。请注意,这会为每行添加[Exp]标记。
  2. 在新创建的项目中:在“参考”选项卡中,勾选刚刚提到的项目的复选框,当您切换回“包含”选项卡时,您会看到刚刚导出的所有路径都显示在那里。
  3. 引用库的方式相同。

    另请看:

答案 2 :(得分:7)

我经常使用CPATH环境变量在我的所有项目中包含不同的目录。它位于:c / c ++ - > build->环境下。 一定要用':'字符(不是';'分号)分隔每个路径。

您还可以使用PATH包含静态库。但是,对我而言,它只能在linux中可靠地运行。在OSX中它毁灭了。

另一种方法是将这些库和标题添加到您的环境默认搜索路径中;地方喜欢/ usr / local / lib。请阅读链接器默认搜索的位置。

答案 3 :(得分:5)

对于库,我在源项目中执行以下操作:

项目 - >属性 - > c / c ++ Build - > c ++链接器 - >库

在此之后我选择了库(shift + mouse)&复制(ctrl + c)

在空白项目中:

项目 - >属性 - > c / c ++ Build - > c ++链接器 - >库

ctrl + v(粘贴)

与eclipse juno合作

答案 4 :(得分:3)

我只是使用Project explorer中内置的eclipse复制一个项目。之后,只需重命名源文件。

答案 5 :(得分:1)

我很久以前就在研究它。 一些帖子提到了一种方法: 项目>属性> C / C ++一般>路径和符号然后单击“导出设置”.. 但它只适用于包含头文件。

要指定库和库路径,据我所知,我找不到一个简单的解决方案。 例如,我现在使用ffmpeg库。 如果使用“Makefile”,则包含和库文件可以表示如下:

  

FFMPEG_LIBS = libavdevice
                  libavformat流
                  libavfilter
                  libavcodec的
                  libswresample
                  libswscale
                  libavutil
  CFLAGS:= $(shell pkg-config --cflags $(FFMPEG_LIBS))$(CFLAGS)LDLIBS   := $(shell pkg-config --libs $(FFMPEG_LIBS))$(LDLIBS)

这里有很多文件。 如果我在Eclipse C ++项目中逐个包含它们,那就太令人生畏了。 我不知道为什么在Eclipse中没有选项可以通过使用过去的长行来包含库文件;作为分隔符,例如:

  

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

有没有这样的方法,或者我必须逐个输入库文件,还是必须使用Makefile?

答案 6 :(得分:0)

我遇到了同样的问题,并解决了这个问题: 我在自动生成的makefile中看到有行:

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

阅读How can I parameterize an Eclipse generated make file后,我意识到您可以在项目之外定义变量。这意味着它可以是多个项目的共享变量。所以我在项目之外添加了makefile.defs文件,并在其中声明了一些变量:

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

比我的所有项目“properties-&gt; c / c ++ build-&gt;构建变量”我定义了新变量:

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

而且你可以在项目中找到那些变量。转到属性 - > c / c ++ build-&gt;设置并选择编译器包含并添加$(my_include)。转到链接器并选择Libraries并添加到搜索路径$(my_libs_path)。由于某种原因,Libraries(-l)不能接受我定义的env变量,所以我通过选择链接器绕过它,然后转到Miscellaneous并添加到链接器标志$(my_libs)。最后,您必须更改命令行中的顺序(当链接器执行时)导致库列表需要在.o文件之后。所以要做到这一点,你去链接器和选项卡,你可以看到将要执行的最后一个命令行。在“专家设置命令行模式”中,将$ {FLAGS}移动到命令行的后面(将$(my_libs)字符串移动到命令行的后面)。这一切。它很多,但你只需要做一次......希望它有助于某人......

答案 7 :(得分:0)

半自动,可以使用这个perl脚本完成:

#!/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";
}