在Eclipse CDT中编译含有多个main函数的项目

http://weblog.imthewan.com/2010/09/eclipse-cdt-multiple-target/

在C/C++项目中有时候会需要在一个项目中包含多个main函数。在Visual Studio中,这种情况可以由一个解决方案下带多个项目来解决,但在Eclipse CDT中没有解决方案这样的概念。其实通过定制的Makefile,Eclipse CDT也可以很容易达到目的,对于习惯了Makefile的程序员来说可能觉得这样反而更灵活。默 认情况下,Eclipse CDT会为项目的Debug和Release配置都自动产生makefile,而且这个自动产生的makefile是会尝试把所有源文件编译并生成单独的 一个以项目名命令的二进制文件。而如果你的项目有两个以上的文件带有main函数,Eclipse就会报错:

multiple definition of `main’

既然Eclipse也是通过makefile来,那么一定通过能自己修改或创建makefile的方法让Eclipse知道哪些时候该敢什么,而不 是不按你的意图做事。通过一番尝试,我找到了可行之道。下面以一个简单的例子来说明怎么在Eclipse里面随心所欲的使用makefile。

假设我们有一个很简单的C/S结构的项目,包含客户端和服务端这两个需要编译的目标。现在你已经写好了代码:tcp_server.cpp, tcp_client.cpp。那么Let’s do it now!

proj-properties

第一步,在项目的Properties中定位到”C/C++ Build”,在右边的面板中点击”Manage Configurations…”,随后选择”New…”新建一个配置(图1),取名MyDebug并从已有的Debug配置复制(图2)。之后回到图1 的窗口,在顶部下拉菜单中选择MyDebug。”Makefile generation”区域有一个选项”Generate Makefiles automatically”,因为我们要自己编写,所以去掉勾选。随后可选择性的编辑”Build directory”,为简单起见,建议设为项目所在的根目录,需要注意的是这个必须是你存放Makefile的路径。

create-new-conf

第二步,编写Makefile,注意要放在上面所设置的路径下,还要注意如果不在代码文件同一目录,需要在Makefile中用”..”操作符跳转路径。我在这个例子中使用的Makefile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#demo multiple target project
#fwoncn
CC := g++
RM := rm -rf
LIBS := -l boost_system -l boost_thread
 
all : tcp_client tcp_server
 
clean :
    $(RM) tcp_client tcp_server
 
tcp_client : tcp_client.cpp
    $(CC) tcp_client.cpp -o tcp_client $(LIBS)
 
tcp_server : tcp_server.cpp
    $(CC) tcp_server.cpp -o tcp_server $(LIBS)

add-make-target

第三步,编译项目。如果有选择”Build Automatically”就不用操心了,Eclipse会根据你的Makefile工作,并且不会再出现多个main函数的错误。否则,点击工具栏上 的Build标志旁边下拉按钮并选择MyDebug,这样Eclipse会找到Makefile中定义的第一个target也就是all来分别编译两个对 象。另外,如果想单独编译其中某个target,可选择Project菜单 – Make Target – Build… – Add… 名字取与Makefile中相同的target名,比如tcp_client。而后选中刚创建的target,点击Build就可以了。

posted @ 2012-07-03 17:14  董雨  阅读(865)  评论(0编辑  收藏  举报