项目目录/lib/mytest.c中的一个文件包含用于测试目的的条件主
#ifdef TEST
int main(int argc, char *argv[])
#endif
所以要测试我在configure.ac文件中添加的代码
AC_DEFINE(TEST, 1,[My description for TEST])
还有其他文件包含mytest.h。当我尝试autoreconf然后./configure然后让我在gcc中得到以下错误:
multiple definition of `main'
这是可以理解的,因为包含mytest.h的文件中也包含主要功能。我希望有一个独立的mytest程序用于测试目的。
如何构建项目?我需要在配置nad Make文件中做出哪些更改?
感谢。
答案 0 :(得分:0)
一般情况下,跟踪ifdef以定义main以允许tesrt驱动程序是繁琐的,并且您已经注意到,容易出错。
您可以像评论一样,在您的其他#ifndef TEST
个文件中添加.c
,并使用相同的文件来定义TEST
。但是,如果你有第三个或更多的测试驱动程序,该怎么办呢。
我采用的解决方案更简单,总是有一个main
,但是让它调用其他不称为main的main
函数,例如可以调用常规main函数{{1}你的测试可能是main_program
,小方测试可能是main_test1
。为了保持意图清晰,我通常在所有这些psudo-main函数前加上main_test_tiny_func
我偶尔会使用注释来切换我想要使用的伪主体,但这会变得很乱。
的main.c
main_
或者,您可以设置清单常量,以决定在有多个测试的情况下运行哪个测试
int main(int argc, char *argv[])
{
#ifdef TEST1
return main_test1(argc, argv);
#else
#ifdef TINY_TEST
return main_test_tiny_func(argc, argv);
#else
return main_program(argc, argv);
#endif
#endif
}
在运行时决定运行哪些(例如回归测试)偶尔会很有用,在这种情况下,您将使用与上面相同的开关并吃第一个arg来决定
#ifndef TEST_TO_RUN
#define TEST_TO_RUN 0
#endif
int main(int argc, char *argv[])
{
switch(TEST_TO_RUN)
case 2:
return main_test1(argc, argv);
case 1:
return main_test_tiny_func(argc, argv);
case 0:
return main_program(argc, argv);
}
}