如何在KDevelop中为基于automake的项目添加自定义构建步骤?

时间:2008-09-20 04:57:02

标签: unit-testing automake kdevelop

我最近开始使用C ++和KDevelop开发个人编码项目。虽然我刚刚开始玩游戏,但我认为如果我在进一步开发之前设置一个合适的单元测试套件,那么从长远来看它会更好。我已经创建了一个单独的测试运行程序可执行文件作为子项目,我添加到它的测试似乎正常运行。到目前为止,成功。

但是,我真的很想在每次构建时运行我的单元测试,而不仅仅是在我明确运行它们时。当我将我所做的混乱分解为便利库时,尤其如此,每个便利库都可能有自己的测试可执行文件。我不想手动运行它们,而是让它们作为构建过程的最后一步运行。我已经查看了项目菜单和automake管理器中的所有选项,但我无法弄清楚如何设置它。

我想这可能是通过手工编辑makefile来完成的。不幸的是,我的makefile-fu有点弱,而且我也害怕KDevelop可能会覆盖我下次通过IDE更改内容时手动做出的任何更改。因此,如果有关于如何通过KDevelop本身做到这一点的选项,我更倾向于这样做。

有人知道如何让KDevelop在构建过程中运行我的测试可执行文件吗?谢谢!

(我并非100%与KDevelop联系。如果KDevelop无法做到这一点,或者如果有一个IDE让这更容易,我可以说服切换。)

2 个答案:

答案 0 :(得分:3)

虽然你可以操纵默认的`make`目标来运行你的测试, 一般不推荐,因为每次调用

make

会运行所有的测试。 您应该使用“检查”目标, 这是软件包中可接受的准标准。 通过这样做, 测试仅在您运行时启动

make check

然后,您可以轻松配置KDevelop 运行“make check”而不仅仅是“make”。

由于您使用的是automake(通过KDevelop), 你不需要自己写“检查”目标。 相反,只需编辑`Makefile.am`并设置一些变量:

TESTS = ...

请看看 automake documentation, "Support for test suites" 了解更多信息。

答案 1 :(得分:0)

我这样做了:

$ cat src/base64.c
//code to be tested
int encode64(...) { ... }

#ifdef UNITTEST
#include <assert.h>
int main(int argc, char* argv[])
{
  assert( encode64(...) == 0 );
  return 0;
}
#endif //UNITTEST
/* end file.c */

$ cat src/Makefile.am
...
check_PROGRAMS = base64-test
base64_test_SOURCES = base64.c
base64_test_CPPFLAGS = -I../include -DUNITTEST
TESTS = base64-test

make check 将构建src / base64-test并运行它:

$ make check
...
PASS: base64-test
==================
All 1 tests passed
==================
...

现在我试图将它全部封装为m4宏,如下所示:

MAKE_UNITTEST(base64.c)

应该产生类似上面的解决方案。

希望这有帮助。