我想知道是否有使用makefile动态编译的方法。
假设我有a.cpp
,b.cpp
和c.cpp
个文件。这些是我想比较运行时的算法。
首先,我只想编译a和b文件,然后执行以查看结果。
接下来,我想编译b和c并运行。
这不仅仅是一个订单,a和b可以编译或b和c,或a和c或(a,b和c)完全一致。
我可以使用makefile吗?
答案 0 :(得分:1)
不确定您希望如何“比较”运行时,因此此示例仅通过time
命令打印它们,但您可以使用awk和gnuplot生成图表(如果需要)。每个目标只是指定要运行的shell命令。 %
用于根据模式定义目标。
all: ab bc
%.out: %.cpp
gcc $< -o $@
ab: a.out b.out
time ./a.out && time ./b.out
bc: b.out c.out
time ./b.out && time ./c.out
(确保缩进是制表符)
答案 1 :(得分:1)
是的,这只是依赖性排序的问题:它看起来像:
all: results_ab results_bc
#compare results...
results_ab: a.o b.o
# link, and run, and store results
results_bc: results_ab b.o c.o
# link, run and store results.
答案 2 :(得分:0)
虽然可能会使用编译器和makefile来执行此操作,但我建议您不要执行此操作。重组您的计划。
e.g。我猜您喜欢test_runner.cpp
,algorithm_a.cpp
和algorithm_b.cpp
?
e.g。制作一个模板函数,让algorthim进行测试。然后将其用于每个实现。
template<class T> void test_implementation() { ... do stuff with T to test it ... }
void main()
{
test_implementation<A>();
test_implementation<A>();
}
首先,将它们整合到一个测试程序中有什么不好?然后你可以按顺序运行和计算两种算法,或者你可以使用命令行参数?
另外,如果你认为test_runner.cpp
是一个库,那么你要测试的两个算法是单独的程序,只是使用那个库。
还需要一些时间来学习makefile语法。一旦你理解了语法解决方案应该是显而易见的,那么你仍然应该适用于这种情况。