在 Eclipse 中使用跨平台库设置跨平台 C++ 项目
Posted
技术标签:
【中文标题】在 Eclipse 中使用跨平台库设置跨平台 C++ 项目【英文标题】:Setting up a cross-platform C++ project in Eclipse with cross-platform libraries 【发布时间】:2011-04-18 05:18:55 【问题描述】:我正在与其他 8 个人一起开发一个跨平台 C++ 项目,该项目使用以下库:
OpenCV 库 Boost C++ 库该项目旨在跨平台,因此所有用户都同意不使用特定于平台的代码,并且为了使事情尽可能简单,所有用户都将使用 Eclipse 作为他们的 IDE。但是,有些人将使用 Eclipse for Windows,而其他人将使用 Eclipse for Linux。
由于项目将托管在 SVN 上,我们希望避免与共享的不同配置文件(如 make 文件、eclipse 项目文件等)发生冲突。我们还希望通过 SVN 尽可能多地共享配置文件,以使配置尽可能简单。
假设所有用户都已正确配置系统变量并安装了所需的构建工具(如 make、cmake 等),并已正确配置了他们的 Eclipse 设置(但不是项目特定的设置)。
项目如何配置一次,哪些配置文件要共享到仓库,让Windows和Linux用户都可以编译,而不需要修改从SVN仓库获取的配置文件?
(我不是在寻找专门适用于我提到的那两个库的完整解决方案,因此我希望能提供一般性的逐步说明,这将使我能够轻松地添加另一个库。)
【问题讨论】:
我已经研究过以这种方式使用 Eclipse 并遇到了很多问题。首先,我会尝试对每个平台进行完全独立的调试/发布配置,并且尽可能坚持使用完全相同版本的 Eclipse 和 CDT!您最终只能使用 SVN 来共享代码并在本地维护 Eclipse 构建配置。我很想知道你过得怎么样! 我目前正在研究使用 Eclipse 和 SVN 建立一个跨平台的 open-cv 项目。我很想知道你是怎么过的?如果您现在能够根据自己的经验回答自己的问题,那就太好了。 【参考方案1】:一般性讨论:
您将需要安装 Cygwin 或类似的东西,以使 GNU Autotools 工具链可用于 Windows 上的 Eclipse: How to deal with Eclipse CDT+Cygwin?
在您的开发机器上准备好带有 CDT 和 SVN 连接器的工具链 Eclipse 后,请执行以下步骤。
-
打开 Eclipse 并切换到 CDT:单击 Window->Open Perspective->Other... 并选择 C/C++
选择:Eclipse->文件->新建->C++项目
项目名称:查看器
选择:项目类型->GNU Autotools->Hello World C++ Autotools 项目
点击:下一步
点击:完成
在项目资源管理器中右键单击:查看器->重新配置项目
单击:Console->Display Selected Console submenu->#CDT Global Build Console。如果“autoreconf -i”输出正常,继续执行步骤 9。如果控制台报告:sh: autoreconf: command not found,则将 autoreconf 命令的路径添加到项目构建环境:
-
在Project Explorer中右键:查看器->属性->C/C++ Build->Environment->Add...
名称:路径
值:path_to_autoreconf:$env_var:PATH
点击:确定
点击:应用
返回第 8 步。
添加一些代码:
包括
包括
包括
int main(int argc, char *argv[])
断言(argc > 1);
CvMat* img = cvLoadImageM(argv1);
cvNamedWindow("图片", CV_WINDOW_AUTOSIZE);
cvShowImage("图片", img);
cvWaitKey(0);
返回 0;
双击:Project Explorer->viewer->configure.ac,在AC_PROG_CXX下面输入如下代码。
双击:Project Explorer->viewer->src->Makefile.am,输入以下代码。 >AC_CHECK_LIB([opencv_core],[cvSetZero],[],[])
AC_CHECK_LIB([opencv_highgui],[cvShowImage],[],[])
AC_CHECK_LIB([boost_regex-mt],[regexecA],[BOOST_LIB_SUFFIX="-mt"],[BOOST_LIB_SUFFIX=""])
AC_SUBST(BOOST_LIB_SUFFIX)
重复第 8 步,autoreconf(重新配置项目) 点击:项目浏览器->查看器 通过单击工具栏中的锤子构建项目。如果你没有看到锤子,Window->Open Perspective->Other... 并选择 C/C++。如果 C/C++ 未显示,请安装 CDT。 点击:Project Explorer->viewer,然后Run->Run,然后在Run As窗口->Local C/C++ Application,然后在Launch Debug Configuration Selection窗口->gdb/mi,然后回车。您应该会看到 Hello World。 退出 Eclipse 并导航到查看器项目目录。 在命令行上,发出 make dist 确保您有一个 viewer-1.0.tar.gz 或类似名称的文件,然后将其删除:rm viewer-1.0.tar.gz 在命令行上,发出 make clean 在同一个地方,发出 make distclean。 导航到包含查看器项目的工作区目录。 将整个查看器目录移动到包含您要放置查看器项目的 svn checkout 的目录。 将目录更改到您刚刚移动查看器的位置。 svn add viewer && svn ci -m "Added eclipse-autotool project" 打开 eclipse 并确保您已安装 SVN 连接器。 从 Project Explorer 视图中删除“查看器”项目。 打开 Eclipse 并将此 SVN 存储库签出添加到 Team 透视图。 从您的 SVN 存储库签出导入查看器项目。 切换回 C/C++ 视角,享受乐趣。bin_PROGRAMS=查看器
viewer_SOURCES=openCvFocusIssue.cpp
viewer_LDFLAGS = -lboost_regex@BOOST_LIB_SUFFIX@ -lopencv_core -lopencv_highgui
【讨论】:
【参考方案2】:两个建议:
使用 cmake:我喜欢这个工具。有一点学习曲线,但是 如果你做对了,所有项目将包括 cmake 文件 当一个人第一次检查它时,他们会运行 cmake 来生成 他们的 makefile(或 VC++ 项目文件等)具有适用于 linux 或 windows 的所有不同规则之一 可能需要。或
签入项目的基本配置,然后将这些配置添加到 git/svn 忽略,这样就没有人再次签入它们,然后当您第一次签出时,您必须让您的配置运行,但之后它不会被覆盖。【讨论】:
以上是关于在 Eclipse 中使用跨平台库设置跨平台 C++ 项目的主要内容,如果未能解决你的问题,请参考以下文章
C 的图形界面开发库,可借助 XML 和 CSS构建简单的跨平台桌面应用