选择在Makefile中使用哪个main()

时间:2010-03-23 09:52:06

标签: c makefile

在C项目中,我在几个文件中有一个main()函数。当我编译时,因此有一个错误“主要的多个声明”。是否可以在Makefile中选择应该使用哪个main()函数进行编译? (其他的将被忽略......)

3 个答案:

答案 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()的其他实例的源文件。