随机化 为目标制定目标

Randomize Make goals for a target

我有一个 C++ 库,它有一些 C++ 静态对象。该库可能会遭受 C++ 静态初始化失败。我试图通过在构建过程中随机化 *.o 文件的顺序来审查不可预见的翻译单元依赖关系。

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

Goals are the targets that make strives ultimately to update. You can override this behavior using the command line (see Arguments to Specify the Goals) ...

我也关注了9.2 Arguments to Specify the Goals,但是没有提供治疗。这并没有让我感到惊讶。

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

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

提前致谢。

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

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

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

只要您不使用并行 make(-j 选项),这就有效。如果你是,顺序仍然是随机的,但它也取决于工作数量、系统负载、当前月相等。