我有几个源文件作为匿名发布/订阅节点一起运行。有一个main函数可以收集所有节点并通过它们的启动函数启动它们。
// main.cpp
#include "nodeA.h"
#include "nodeB.h"
int main(int argc, char *argv[])
{
/* some argument parsing here */
start_node_a(argc, argv);
start_node_b(argc, argv);
}
为了使配置更容易,我想将main函数转换为启动这些节点的shell脚本。这意味着将start_node()
函数转换为main()
函数,以便它们从命令行运行。
#!bin/bash
node_a -args
node_b -different_args
这使得运行测试变得更加棘手,b / c节点main()
函数会与测试main()
冲突,并且不再有tart_node()
函数,自动化测试可以运行
我的解决方案是将start_node
函数包装在main函数中,但是这需要为每个节点添加一些额外的样板,并且在测试链接期间忽略main而不是节点构建(我实际上是不确定我是否可以使用gnumake& g ++)。
// nodeA.cpp
int main(int argc, char *argv[])
{
start_node_a(argc, argv);
}
有更优雅的方法吗?一种从测试中的函数调用启动程序,以及从命令行启动程序的方法?
*注意:我也考虑过系统调用,但会考虑使用比使用main()包装器更糟糕的解决方案。
答案 0 :(得分:0)
您是否考虑在程序中嵌入解释器(如Lua或Guile)?然后你会写一些脚本(在Lua,Guile等......)来驱动各种start_node_a
等...
基本上,你将添加一些特定于应用程序的原语绑定并粘贴到Lua或Guile解释器上,并且你将编写一些Lua或Guile脚本。两者都有详细记录(这里是Lua doc,这里是Guile doc)并且非常有用。
对于Lua:使用lua_newstate
创建状态,然后使用lua_register
添加基元luaL_dofile
来运行文件,luaL_dostring
来评估字符串。
对于Guile:阅读Programming Overview
顺便说一句,我会推荐Guile(LGPL许可)而不是Lua(麻省理工学院许可),因为我更喜欢Scheme(Guile语言)而不是Lua语言。在所有情况下,请谨慎对待内存管理。