使用 Eclipse:如何为所有 C/C++ 项目添加包含路径和库
Posted
技术标签:
【中文标题】使用 Eclipse:如何为所有 C/C++ 项目添加包含路径和库【英文标题】:With Eclipse: How to add include paths and libraries for all your C/C++ project 【发布时间】:2011-02-11 22:52:18 【问题描述】:是否可以将包含路径和库添加到所有 C/C++ 项目?换句话说:如何使它们成为全局或将一个 C/C++ 项目构建设置复制到另一个?
【问题讨论】:
【参考方案1】:对于 Eclipse 靛蓝: 无法定义全局包含路径和库。 但是您可以将它们从一个项目导出和导入到另一个项目。
转到 项目 > 属性 > C/C++ 常规 > 路径和符号 然后单击 Export Settings... 将包含路径和/或符号定义保存到文件中。在您的其他项目中,您可以使用 Import Settings...
【讨论】:
完美运行(Eclipse Juno):您只需将包含最相关的一组包含的项目中的设置导出到 xml 文件(我们称之为 default_includes.xml)并将其存储在硬盘上的某个位置驱动让你的其他项目导入它,就是这样。 图书馆怎么样?【参考方案2】:是的,您可以分两步,像 parvus 提到的那样更加用户友好。两者都在“项目属性”->“C/C++ 常规”->“路径和符号”中完成:
-
在已配置包含路径的现有项目中:突出显示要复制到新项目的包含路径(在“包含”选项卡中)并选择“导出”。请注意,这会为每一行添加一个
[Exp]
标记。
在新创建的项目中:在“参考”选项卡中,勾选刚才提到的项目的复选框,当您切换回“包含”选项卡时,您会看到您刚刚导出的所有路径都出现在那里。
引用库的工作方式相同。
也可以看看:
Eclipse Juno Documentation 这个话题, a related *** question【讨论】:
在面向 C/C++ 开发人员的 Eclipse IDE 中工作时,我无法使包含的库以与您所描述的方式相同的方式工作。版本:火星版本 (4.5.0)。内部版本号:20150621-1200。【参考方案3】:我经常使用 CPATH 环境变量在我的所有项目中包含不同的目录。它位于:c/c++->build->environment。 请务必使用 ':' 字符(而不是 ';' 分号)分隔每个路径。
您还可以使用 PATH 来包含静态库。但是,对我来说,它只能在 linux 中可靠地工作。在 OSX 中它破坏了 make。
替代方法是将这些库和标头添加到您的环境默认搜索路径中;地方喜欢 /usr/local/lib。阅读链接器默认搜索的位置。
【讨论】:
在 Eclipse 中设置 CPATH 可以很好地解决所有项目的问题(如果它是可重复的设置)。我可以在 Eclipse 之外拥有另一个 CPATH。【参考方案4】:对于库,我在源项目中执行以下操作:
项目 -> 属性 -> c/c++Build -> c++ 链接器 -> 库
在此之后我选择库(shift + mouse)并复制(ctrl + c)
在空白项目中:
项目 -> 属性 -> c/c++Build -> c++ 链接器 -> 库
ctrl + v(粘贴)
适用于 Eclipse Juno
【讨论】:
对于 C/C++ 开发人员的 Eclipse IDE 怎么样。版本:火星版本 (4.5.0)。内部版本号:20150621-1200?【参考方案5】:我只是使用项目资源管理器中内置的 Eclipse 复制一个项目。之后,只需重命名源文件。
【讨论】:
【参考方案6】:我很久以前就在研究它。 一些帖子提到了一种方法: Project > Properties > C/C++ General > Paths and Symbols 然后点击 Export Settings.. 但它只适用于包含头文件。
要指定库和库路径,据我所知,我没有找到简单的解决方案。 例如,我现在正在使用 ffmpeg 库。 如果使用“Makefile”,则包含文件和库文件可以表示如下:
FFMPEG_LIBS=libavdevice libav格式 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?
【讨论】:
顺便说一句,我曾经尝试过 Eclipse 的 pkg-config 插件,但它不适用于我尝试过的库。让我再试一次,因为我猜之前的失败可能是由于错误。但无论如何,我认为有一个选项使用一行来指定库文件会更好。 我想我找到了办法。转到 Properties -> C/C++ Build -> Settings -> GCC C++ Linker -> Miscellaneous -> Linker flags,你可以输入“-lavdevice”等来指定库。【参考方案7】:我遇到了同样的问题并像这样解决了它: 我看到在自动生成的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->c/c++ build->build variables”中我定义了新变量:
my_include = $(MY_INCLUDE)
my_libs_path = $(MYLIBS_PATH)
my_libs = $(MY_LIBS)
您可以在项目中使用这些变量。转到 properties->c/c++ build->Settings 并选择编译器包含并添加 $(my_include)。转到链接器并选择库并添加到搜索路径 $(my_libs_path)。由于某种原因,库 (-l) 无法获取我定义的环境变量,所以我通过选择链接器绕过它,然后转到杂项并添加到链接器标志 $(my_libs)。最后,您必须更改命令行中的顺序(当链接器执行时),因为库列表需要位于 .o 文件之后。因此,您可以转到链接器和选项卡,在那里您可以看到将要执行的最终命令行。在“专家设置命令行模式”中,您将 $FLAGS 移动到命令行的后面(将 $(my_libs) 字符串移动到命令行的后面)。仅此而已。它很多,但你只需要做一次......希望它可以帮助某人......
【讨论】:
【参考方案8】:半自动,它可以使用这个 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";
【讨论】:
以上是关于使用 Eclipse:如何为所有 C/C++ 项目添加包含路径和库的主要内容,如果未能解决你的问题,请参考以下文章
如何为现有的非 android Eclipse 项目制作 android manifest?
一个eclipse里面如何建立两个互不影响的project, 如建立一个Cproject和一个javaproject?