是否可以在所有C / C ++项目中添加包含路径和库?换句话说:如何将它们设为全局或将一个C / C ++项目构建设置复制到另一个?
答案 0 :(得分:13)
对于Eclipse Indigo: 没有可能定义全局包含路径和库。 但是您可以将它们从一个项目导出并导入到另一个项目中。
转到项目>属性> C / C ++一般>路径和符号 然后单击导出设置... 以将包含路径和/或符号定义保存到文件中。在您的其他项目中,您可以使用导入设置...
答案 1 :(得分:9)
是的,您可以通过2个步骤,更加方便用户,就像parvus提到的那样。两者都在“项目属性”中完成 - > “C / C ++ General” - > “路径和符号”:
[Exp]
标记。引用库的方式相同。
另请看:
答案 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";
}