繁体   English   中英

使用makefile仅动态编译选定的文件

[英]compile only selected files dynamically using makefile

我想知道是否有一种使用makefile动态编译的方法。 假设我有一个a.cppb.cppc.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.cppalgorithm_a.cppalgorithm_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM