0

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

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

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

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

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

如果没有,是否有任何替代方案?这是在测试环境中,所以我有更多可用的工具,而不仅仅是 GNUmake。

提前致谢。

4

1 回答 1

2

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

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

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

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

于 2016-09-27T07:51:40.253 回答