2

我想使用 .cpp 源文件中的一些函数,这些函数在我的 .cpp 源文件中有一个 main 函数。(我正在使用 make 和 gcc 构建。)

这是我的 Makefile 中的规则:

$(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) $(LIBS) -o $@

这是输出(更改了一些名称以防止分心):

$ make foo
g++ -g -Wall -m32 -Ilinux/include foo.cpp bar.cpp -o foo
/tmp/ccJvCgT3.o: In function `main':
/home/dspitzer/stuff/bar.cpp:758: multiple definition of `main'
/tmp/ccUBab2r.o:/home/dspitzer/stuff/foo.cpp:68: first defined here
collect2: ld returned 1 exit status
make: *** [foo] Error 1

如何向 gcc 表明我想使用 foo.cpp 中的 main?

更新:我应该补充说“bar.cpp”是“别人的”代码,并且有它自己的主要理由。(听起来我应该与其他人合作,让他将共享函数拆分为单独的文件。)

4

4 回答 4

5

您可以做的是将每个 main() 函数包装在一个#ifdef块中,然后使用命令行定义将导致使用相关 main 的符号。

#ifdef USE_MAIN1
int main(void)
{

}
#endif

然后确保 gcc 命令行添加了类似这样的内容

-DUSE_MAIN1

或者只是重构你的代码!

于 2010-06-20T17:16:00.500 回答
2

这不是关于main使用哪个作为你的“主要”,因为你甚至不会走那么远。

您不能重新定义函数,它违反了单一定义规则。以同样的方式你不能这样做:

void foo(void)
{
    // number one
}

void foo(void)
{
    // number two
}

// two foo's? ill-formed.

您不能尝试编译多个main's. 您需要删除其他的。

于 2010-06-20T17:13:58.013 回答
1

最简单的方法是删除第二个 main(...){ ...},并保留其余函数。这很容易解决问题

于 2010-06-20T17:17:41.353 回答
1

听起来我应该与其他人合作,让他将共享功能拆分为单独的文件

没错,那是最好的选择。如果您都需要单独main的 s 进行测试、不同的产品或其他原因,请将常用代码和mains 分解到单独的文件中,并根据某些构建设置仅使用您需要的那个。

于 2010-06-20T17:46:33.090 回答