我有一个C ++库,它有一些C ++静态对象。该库可能会受到C ++静态初始化惨败的影响。我试图通过在构建期间随机化*.o
文件的顺序来审查无法预料的翻译单元依赖项。
我在GNU手册中访问了2.3 How make Processes a Makefile,它告诉我:
目标是最终努力更新的目标。您可以使用命令行覆盖此行为(请参阅指定目标的参数)...
我也跟着9.2 Arguments to Specify the Goals,但没有提供治疗。这并不让我感到惊讶。
是否可以让Make随机化其目标?如果是的话,我该怎么做?
如果没有,有其他选择吗?这是在一个测试环境中,所以我有更多的工具可供我使用,而不仅仅是GNUmake。
提前致谢。
答案 0 :(得分:2)
这实际上是实现定义的,但GNU Make将从左到右处理目标。
假设您有一个OBJS
变量,其中包含您要随机化的对象,您可以编写类似的内容(使用例如shuf
):
RAND_OBJS := $(shell shuf -e -- $(OBJS))
random_build: $(RAND_OBJS)
只要您不使用并行make(-j
选项),这就成立了。如果你是订单仍然是随机的,但它也将取决于工作的数量,系统负载,月亮的当前阶段等。