随机化为目标制作目标

时间:2016-09-27 04:50:36

标签: gnu-make target static-order-fiasco

我有一个C ++库,它有一些C ++静态对象。该库可能会受到C ++静态初始化惨败的影响。我试图通过在构建期间随机化*.o文件的顺序来审查无法预料的翻译单元依赖项。

我在GNU手册中访问了2.3 How make Processes a Makefile,它告诉我:

  

目标是最终努力更新的目标。您可以使用命令行覆盖此行为(请参阅指定目标的参数)...

我也跟着9.2 Arguments to Specify the Goals,但没有提供治疗。这并不让我感到惊讶。

是否可以让Make随机化其目标?如果是的话,我该怎么做?

如果没有,有其他选择吗?这是在一个测试环境中,所以我有更多的工具可供我使用,而不仅仅是GNUmake。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这实际上是实现定义的,但GNU Make将从左到右处理目标。

假设您有一个OBJS变量,其中包含您要随机化的对象,您可以编写类似的内容(使用例如shuf):

RAND_OBJS := $(shell shuf -e -- $(OBJS))
random_build: $(RAND_OBJS)

只要您不使用并行make(-j选项),这就成立了。如果你是订单仍然是随机的,但它也将取决于工作的数量,系统负载,月亮的当前阶段等。