[英]compile only selected files dynamically using makefile
我想知道是否有一种使用makefile动态编译的方法。 假设我有一个a.cpp
, b.cpp
和c.cpp
文件。 这些是我想比较其运行时间的一些算法。 首先,我只想编译a和b文件,然后执行以查看结果。 接下来,我要编译b和c并运行。
这不仅是一个命令,还可以编译a和b或b和c,也可以编译a和c或(a,b和c)。
我可以使用makefile做到吗?
不确定要如何“比较”运行时,因此本示例仅通过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
(确保缩进是制表符)
是的,这只是依赖关系排序的问题:它看起来像:
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.
尽管可以使用编译器和makefile来执行此操作,但ID建议您不要这样做。 重组程序。
例如我猜你有喜欢test_runner.cpp
, algorithm_a.cpp
和algorithm_b.cpp
吗?
例如,使一个模板函数以算法进行测试。 然后将其用于每个实现。
template<class T> void test_implementation() { ... do stuff with T to test it ... }
void main()
{
test_implementation<A>();
test_implementation<A>();
}
因此,首先,将它们合并为一个程序进行测试有什么不好呢? 然后可以依次运行和计时两种算法,或者可以使用命令行参数?
或者,如果您将test_runner.cpp
视为一个库, test_runner.cpp
测试的两个算法是单独的程序,仅使用该库即可。
还需要一些时间来学习makefile语法。 一旦您了解了语法解决方案应该是显而易见的,尽管这仍然绝不是您应适用于这种情况的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.