在C项目中,我在几个文件中有一个main()函数。当我编译时,因此有一个错误“主要的多个声明”。是否可以在Makefile中选择应该使用哪个main()函数进行编译? (其他的将被忽略......)
答案 0 :(得分:4)
您可以使用预处理器隐藏它们:
在file1.c中:
#if defined FILE1_MAIN
int main(void)
{
printf("Running main() in file1.c");
return 0;
}
#endif
可以根据需要在任意数量的C文件中重复此操作。
然后在Makefile中有一个逻辑,它将正确的-D选项传递给编译器,即-DFILE1_MAIN包含来自file1的main()
,-DFILE2_MAIN来获取file2.c,依此类推。
这种技术在实施时也很有用。库模块,包括一个可选的main()
,用于在单个C文件中进行测试。
答案 1 :(得分:1)
您只需为每个main()
编写一个目标,您可以忽略除{1}}之外的所有文件。
答案 2 :(得分:0)
您的来源中只能有一个main()
功能。您将要么重命名所有其他实例,要么从构建中排除包含main()
的其他实例的源文件。