【发布时间】:2011-02-11 22:52:18
【问题描述】:
是否可以将包含路径和库添加到所有 C/C++ 项目?换句话说:如何使它们成为全局或将一个 C/C++ 项目构建设置复制到另一个?
【问题讨论】:
标签: c++ c eclipse eclipse-cdt
是否可以将包含路径和库添加到所有 C/C++ 项目?换句话说:如何使它们成为全局或将一个 C/C++ 项目构建设置复制到另一个?
【问题讨论】:
标签: c++ c eclipse eclipse-cdt
对于 Eclipse 靛蓝: 无法定义全局包含路径和库。 但是您可以将它们从一个项目导出和导入到另一个项目。
转到 项目 > 属性 > C/C++ 常规 > 路径和符号 然后单击 Export Settings... 将包含路径和/或符号定义保存到文件中。在您的其他项目中,您可以使用 Import Settings...
【讨论】:
是的,您可以分两步,像 parvus 提到的那样更加用户友好。两者都在“项目属性”->“C/C++ 常规”->“路径和符号”中完成:
[Exp] 标记。引用库的工作方式相同。
也可以看看:
【讨论】:
我经常使用 CPATH 环境变量在我的所有项目中包含不同的目录。它位于:c/c++->build->environment。 请务必使用 ':' 字符(而不是 ';' 分号)分隔每个路径。
您还可以使用 PATH 来包含静态库。但是,对我来说,它只能在 linux 中可靠地工作。在 OSX 中它破坏了 make。
替代方法是将这些库和标头添加到您的环境默认搜索路径中;地方喜欢 /usr/local/lib。阅读链接器默认搜索的位置。
【讨论】:
对于库,我在源项目中执行以下操作:
项目 -> 属性 -> c/c++Build -> c++ 链接器 -> 库
在此之后我选择库(shift + mouse)并复制(ctrl + c)
在空白项目中:
项目 -> 属性 -> c/c++Build -> c++ 链接器 -> 库
ctrl + v(粘贴)
适用于 Eclipse Juno
【讨论】:
我只是使用项目资源管理器中内置的 Eclipse 复制一个项目。之后,只需重命名源文件。
【讨论】:
我很久以前就在研究它。 一些帖子提到了一种方法: 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?
【讨论】:
我遇到了同样的问题并像这样解决了它: 我看到在自动生成的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) 字符串移动到命令行的后面)。仅此而已。它很多,但你只需要做一次......希望它可以帮助某人......
【讨论】:
半自动,它可以使用这个 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";
}
【讨论】: