【发布时间】:2010-03-23 09:52:06
【问题描述】:
在一个 C 项目中,我在几个文件中有一个 main() 函数。因此,当我编译时,出现错误“main 的多个声明”。是否可以在 Makefile 中选择应该使用哪一个 main() 函数来编译? (其他的会被忽略...)
【问题讨论】:
在一个 C 项目中,我在几个文件中有一个 main() 函数。因此,当我编译时,出现错误“main 的多个声明”。是否可以在 Makefile 中选择应该使用哪一个 main() 函数来编译? (其他的会被忽略...)
【问题讨论】:
您可以使用预处理器隐藏它们:
在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 文件中进行测试。
【讨论】:
您可以简单地为每个main() 编写一个目标,在此您将忽略除一个包含main() 的文件之外的所有文件。
【讨论】:
您的源代码中只能有一个main() 函数。您必须重命名所有其他实例,或者从构建中排除包含main() 其他实例的源文件。
【讨论】: