我想使用.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”是“别人的”代码,并且有自己的主要原因。 (听起来我应该与其他人合作让他将共享功能拆分成一个单独的文件。)
答案 0 :(得分:5)
你可以做的是将每个main()函数包装在#ifdef
块中,然后使用命令行来定义将导致使用相关main的符号。
#ifdef USE_MAIN1
int main(void)
{
}
#endif
然后确保gcc命令行添加了这样的内容
-DUSE_MAIN1
或者只是重新构建代码!
答案 1 :(得分:2)
这不是关于哪个main
用作“主要”,因为你甚至不会那么远。
您不能重新定义函数,它会违反单一定义规则。以同样的方式做不到:
void foo(void)
{
// number one
}
void foo(void)
{
// number two
}
// two foo's? ill-formed.
您无法尝试编译多个main
。你需要删除其他的。
答案 2 :(得分:1)
最简单的方法是删除第二个主要(...){...},并保留其余的功能。这很容易解决问题
答案 3 :(得分:1)
听起来我应该与其他人合作让他将共享功能拆分为单独的文件
确切地说,那是最好的选择。如果您需要单独的main
进行测试,不同产品或其他原因,请将常用代码和main
分解为单独的文件,并根据某些构建设置仅使用您需要的代码。