【发布时间】:2019-08-03 15:16:05
【问题描述】:
我正在尝试优化我们的构建目标。在我们当前的流程中,我们有单独的 32 位和 64 位构建目标。由于目标不同,我们的构建流程中有数百个目标。我们试图使其全球化,即 32 位和 64 位构建的一个目标。我正在尝试使用下面的代码来实现这一点。
32 位构建的目标/输出目录应该是这样的:
/test/scratch/<client_name>/Linux/...
64 位构建的目标/输出目录应如下所示:
/test/scratch/<client_name>/Linux-64bit/...
因此,基于上述目标目录路径,我正在使用 $(findstring) 函数搜索字符串 Linux 并继续使用 32 位命令运行。否则它将运行 64 位命令,如下所示。
RELEASE_FILES := $(TARGET_DIR)/build/test/csimtime.c
$(RELEASE_FILES): $(TGTDIRFILES)/%: %
ifneq (Linux,$(findstring $(OS),$@))
$(test_lib_32)
else
$(test_lib_64)
endif
$(TARGET_DIR) 变量作为参数传递给 make 命令
make TARGET_DIR=$(TGT32) all32
对于 64 位,我们将改为传递 TARGET_DIR=$(TGT64)。
注意:上面的 test_lib_32/64 是我们在当前 make 文件中包含的其他 make 文件中的宏定义。
按预期工作正常,但我不确定这是否是最好的方法?我注意到这里有一个问题,通常我们传递的TGT32/TGT64 变量具有值:
/test/scratch/<client_name>/Linux/ (for 32bit)
或
/test/scratch/<client_name>/Linux-64bit/... (for 64bit)
如果有人使用 client_name 'Linux' 字符串创建客户端,它将无法工作。即使我们运行 64 位构建,它也会始终转到 if 块并尝试运行 32 位命令。我该如何处理?
我正在寻找在上述路径中获取“client_name”之后的字符串。请问可以帮忙吗?
【问题讨论】:
-
也许您想看看gmtt,它可以让您在列表中从头到尾搜索。您首先必须通过将“/”替换为空格来分隔路径元素。